Linux系统服务之一次性服务(2)
接前一篇文章:Linux系统服务之一次性服务(1)
本文内容参考以下文章:
Systemd OneShot 系统启动时运行一次特定的命令或脚本,并在执行完毕后自动退出-CSDN博客
oneshot一次性服务_type=oneshot-CSDN博客
systemd.service 中文手册 [金步国]
Systemd 入门教程:实战篇 - 阮一峰的网络日志
特此致谢!
三、读懂服务配置文件
上一回已讲过,systemd的Service Unit文件(服务单位文件)用于配置和管理系统中的服务。Service Unit文件的扩展名为.service,通常存储在/etc/systemd/system/目录下或/usr/lib/systemd/system/目录下。
下面是Service Unit文件的一些常见组成部分即配置项:
1. [Unit] 部分
此部分定义服务的基本信息、启动顺序与依赖关系。包括以下字段:
- Description
描述此服务的简短说明、简单描述。
- Documentation
给出文档位置。
- After
指定此服务在哪些其它服务之后启动。
- Before
指定此服务在哪些其它服务之前启动。
注:After和Before字段只涉及启动顺序,不涉及依赖关系。
- Requires、Wants、BindsTo
指定此服务所依赖的其它服务。其中:Wants表示当前服务与其所依赖服务之间的弱依赖关系,即如果所依赖服务启动失败或异常退出,并不影响当前服务继续执行;Requies表示当前服务与其所依赖服务之间的强依赖关系,即如果所依赖服务启动失败或异常退出,那么当前服务也必须退出。
注:Requires和Wants字段只涉及依赖关系,不涉及启动顺序。
2. [Service] 部分
此部分定义服务的执行参数和行为,更通俗地说是定义如何启动当前服务。分为命令、类型、重启行为三类。
(1)命令
包括以下字段:
- ExecStart
在启动该服务时需要执行的命令行(命令+参数)。即指定服务的启动命令或可执行文件路径。
- ExecStop
当该服务被要求停止时所执行的命令行。即停止该服务时执行的命令。执行完此处设置的所有命令行之后,该服务将被视为已经停止。此字段是可选的。
- ExecStartPre
在执行ExecStart之前执行的命令行。即启动此服务之前执行的命令。
- ExecStartPos
在执行ExecStart之后执行的命令行。即启动此服务之后执行的命令。
- ExecStopPost
在该服务停止之后所执行的命令行。无论服务是否启动成功, 此选项中设置的命令都会在服务停止后被无条件的执行。此字段是可选的。
- ExecReload
当该服务被要求重新载入配置时所执行的命令行。即重新加载服务配置时执行的命令。此字段是可选的。
- Environment
设置环境变量。
- EnvironmentFile
从指定的文件中加载环境变量。即指定当前服务的环境参数文件。
(2)类型
Type字段用于定义服务的类型,其指定了如何启动和管理服务的主进程。通过在Service Unit文件中设置Type选项,可以根据服务的特性和需求选择合适的服务类型,以确保systemd正确地管理和监控服务的状态和行为。Type选项的值可以是以下之一:
- simple(默认值)
如果设为simple(当设置了ExecStart=、 但是没有设置Type=与BusName=时,这是默认值), 那么ExecStart=进程就是该服务的主进程,并且systemd会认为在创建了该服务的主服务进程之后,该服务就已经启动完成。
如果此进程需要为系统中的其它进程提供服务,那么必须在该服务启动之前先建立好通信渠道(例如套接字)。 这样,在创建主服务进程之后、执行主服务进程之前,即可启动后继单元,从而加快了后继单元的启动速度。
simple最常见的服务类型。当使用simple类型时,systemd假定服务的主进程会一直运行,直到服务被显式停止或发生错误。这是大多数服务的默认类型。
- exec
exec与simple类似,不同之处在于,只有在该服务的主服务进程执行完成之后,systemd才会认为该服务启动完成。其它后继单元必须一直阻塞到这个时间点之后才能继续启动。换句话说,simple表示当fork()返回时,即算是启动完成,而exec则表示仅在fork()与execve()函数都执行成功时,才算是启动完成。这就意味着对于exec类型的服务来说,如果不能成功调用主服务进程(例如User=不存在、或者二进制可执行文件不存在),那么systemctl start将会执行失败。
- forking
如果设为forking,那么表示ExecStart=进程将会在启动过程中使用fork()系统调用。也就是当所有通信渠道都已建好、启动亦已成功之后,父进程将会退出,而子进程将作为主服务进程继续运行。 这是传统UNIX守护进程的经典做法。 在这种情况下,systemd 会认为在父进程退出之后,该服务就已经启动完成。
如果使用了此种类型,那么建议同时设置PIDFile=选项,以帮助systemd准确可靠的定位该服务的主进程。systemd将会在父进程退出之后 立即开始启动后继单元。
forking适用于那些在启动过程中会创建一个子进程的服务。在这种类型的服务中,systemd会等待主进程启动,并通过监视子进程的退出来确定服务的启动状态。通常,服务的主进程会立即启动子进程,然后退出,而子进程则负责实际的服务运行。
- oneshot
oneshot与simple类似,不同之处在于,只有在该服务的主服务进程退出之后,systemd才会认为该服务启动完成,才会开始启动后继单元。此种类型的服务通常需要设置RemainAfterExit=选项。 当Type=与ExecStart=都没有设置时,Type=oneshot就是默认值。
oneshot适用于只需执行一次操作的服务,例如在系统启动时运行一个脚本或执行一个命令。当服务的主进程退出后,systemd将认为服务已经完成,并将其标记为已停止。
- dbus
dbus与simple类似,不同之处在于,该服务只有获得了BusName=指定的D-Bus名称之后,systemd才会认为该服务启动完成,才会开始启动后继单元。设为此类型相当于隐含的依赖于dbus.socket单元。当设置了BusName=时, 此类型就是默认值。
用于通过DBus系统总线启动的服务。这种类型的服务通常用于与其它进程进行通信或提供DBus接口。
- notify
notify与exec类似,不同之处在于,该服务将会在启动完成之后通过sd_notify(3)之类的接口发送一个通知消息。systemd将会在启动后继单元之前,首先确保该进程已经成功的发送了这个消息。
如果设为此类型,那么下文的NotifyAccess=将只能设为非none值;如果未设置NotifyAccess=选项、或者已经被明确设为none,那么将会被自动强制修改为main。
notify适用于在服务启动完成后向systemd发送通知的服务。服务主进程应在启动完成后向systemd发送一个特定的信号,以通知systemd该服务已准备好接受请求。
注意:目前Type=notify尚不能与PrivateNetwork=yes一起使用。
- idle
idle与simple类似,不同之处在于,服务进程将会被延迟到所有活动任务都完成之后再执行。这样可以避免控制台上的状态信息与shell脚本的输出混杂在一起。
idle适用于以非常低优先级运行的服务。这种类型的服务将在所有其它活动任务完成后才会启动。
相关文章:
Linux系统服务之一次性服务(2)
接前一篇文章:Linux系统服务之一次性服务(1) 本文内容参考以下文章: Systemd OneShot 系统启动时运行一次特定的命令或脚本,并在执行完毕后自动退出-CSDN博客 oneshot一次性服务_typeoneshot-CSDN博客 systemd.serv…...
Vue项目解决van-calendar 显示白色空白,需滑动一下屏幕,才可正常显示
问题描述,如图 ipad(平板)或者 H5移动端引入Vant组件的日历组件(van-calendar),初始化显示空白,需滚动一下屏幕,才可正常显示 解决方法 需在van-calendar上绑定open"openCalendar"事件…...
Linux:可视化管理工具Webmin的安装
一、下载 地址:Webmin官网 我这里下载的是1.700-1版本 二、安装 1、在虚拟机上新建目录并安装软件 mkdir /opt/webmin rpm -ivh webmin-1.700-1.noarch.rpm2、修改webmin的root密码 /usr/libexec/webmin/changepass.pl /etc/webmin root 1234563、修改端口(可…...
WARNING: Access control is not enabled for the database.
MongoDB shell version v3.4.24 WARNING: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted. 1)未启用访问控制 2)读写访问不受限制 D:\MongoDB\Server\3.4\bin>mongo MongoDB shell version v3.4.24 c…...
JavaScript编程进阶 – Return语句
JavaScript编程进阶 – Return语句 JavaScript Programming Advanced – Return Statement By JacksonML 就像人们习惯的函数一样,总觉得在函数体最后需要一个return语句,标志着函数的结束,就像下面这个函数 theFunc() 那样。 function theFunc() { re…...
Python与设计模式--备忘录模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...
04_Flutter自定义Slider滑块
04_Flutter自定义Slider滑块 一.Slider控件基本用法 Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Text("sliderValue: ${_sliderValue.toInt()}"),Slider(value: _sliderValue,min: 0,max: 100,divisions: 10,thumbColor: Colors.…...
服务器数据恢复—EMC存储raid5故障导致上层应用崩溃的数据恢复案例
服务器存储数据恢复环境: EMC某型号存储,8块组建一组raid5磁盘阵列。上层操作系统采用zfs文件系统。 服务器存储故障&分析: raid5阵列中有2块硬盘未知原因离线,raid5阵列崩溃,上层应用无法正常使用。 服务器数据恢…...
7.1 Windows驱动开发:内核监控进程与线程回调
在前面的文章中LyShark一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以监控进程线程创建为例,在Win10系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现,此类函数的原…...
基于ssm的汽车论坛管理系统设计与实现
基于ssm的汽车论坛管理系统设计与实现 摘要:信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题…...
实习开发日志经验总结(一)
文章目录 前言实习日志经验总结 前言 自己之前实习过程中遇到的问题以及相应的解决过程,我都有记录形成比较凌乱的实习日志。故想在整个实习日志的基础上,提炼一些技术知识点或者是解决问题的思路。考虑到实习项目的不方便公开性,所以会隐去…...
【Unity基础】8.简单场景的搭建
【Unity基础】8.简单场景的搭建 大家好,我是Lampard~~ 欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢 (一)场景资源 (1)Import资源包 今天我们将手动去搭一个简单的场景,当…...
傅里叶变换及其在机器学习中的应用
一、介绍 傅立叶变换是一种数学技术,在各个科学和工程领域发挥着关键作用,其应用范围从信号处理到量子力学。近年来,它在机器学习领域发现了新的意义。本文探讨了傅里叶变换的基础知识及其在机器学习应用中日益增长的重要性。 …...
xorm源码学习
文章目录 XORM源码浅析及实践ORMORM vs. SQLXORM软件架构 ORM 引擎 Engine——DBM*core.DB Golang:database/sql 源码基本结构连接复用,提高性能。增加数据库连接池数量连接管理 database/sql主要内容:sql.DB创建数据库连接sql.Open()DB.conn…...
Vue3中的<script setup>和<script>的区别
相同点 在一个 Vue3 单文件组件 (SFC)中,<script setup> 和 <script> 它们各自最多只能存在一个。 不同点 <script setup> 这个脚本块将被预处理为组件的 setup() 函数,这意味着它将为每一个(也可以说每一次)组件实例都执行。 <…...
Docker笔记-Docker搭建最新版zabbix服务端(2023-07-31)
前言 一开始问chartgpt上,搭建的思路是对的,但命令和细节有问题,最后还是依靠StackOverflow解决的。一开始在amd的linux上搭建好docker版的zabbix,但放到arm的机器上就报错了,原因是指令集不匹配,最后跑到…...
QT配合CSS隐藏按钮
第一种方法 在Qt的CSS样式表中,使用 visibility 属性来隐藏按钮。设置 visibility 为 hidden 不可见,而设置为 visible 则可见。 隐藏所有 QPushButton QPushButton {visibility: hidden; }隐藏特定的按钮,用按钮的名称或样式类进行定位就…...
2023亚太地区数学建模C题思路分析+模型+代码+论文
目录 1.2023亚太地区各题思路模型:比赛开始后,第一时间更新,获取见文末名片 3 常见数模问题常见模型分类 3.1 分类问题 3.2 优化问题 详细思路见此名片,开赛第一时间更新 1.亚太地区数学建模ABC题思路模型:9比赛开…...
Linguistic Steganalysis in Few-Shot Scenario论文阅读笔记
TIFS期刊 A类期刊 新知识点 Introduction Linguistic Steganalysis in Few-Shot Scenario模型是个预训练方法。 评估了四种文本加密分析方法,TS-CSW、TS-RNN、Zou、SeSy,用于分析和训练的样本都由VAE-Stego生产(编码方式使用AC编码)。 实验是对比在少样…...
详细学习Pyqt5的4种项目部件(Item Widget)
Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
