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种容器&…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...