编写一个简单的systemd service

发布时间 2023-11-09 18:03:00作者: KqtiC

一个简单的服务长这个样子,这里边东西相当多,这儿只写关键的部分

[Unit]
Description=Clash daemon, A rule-based proxy in Go.

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/clash -f /etc/clash/config.yaml
OOMScoreAdjust=-1000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

 

一个.Service配置文件分为三部分:

  • Unit:定义该服务作为Unit角色时相关的属性
  • Service:定义本服务相关的属性
  • Install:定义本服务在设置服务开机自启动时相关的属性。换句话说,只有在创建/移除服务配置文件的软链接时,Install段才会派上用场。这一配置段不是必须的,当未配置[Install]时,设置开机自启动或禁止开机自启动的操作将无任何效果

 

Unit指令含义
Description Unit的描述信息
Documentation 本Unit的man文档路径
After 本服务在哪些服务启动之后启动,仅定义启动顺序,不定义服务依赖关系,即使要求先启动的服务启动失败,本服务也依然会启动
 
Install指令含义
WantedBy 本服务设置开机自启动时,在被依赖目标的.wants目录下创建本服务的软链接。例如WantedBy = multi-user.target时,将在/etc/systemd/multi-user.target.wants目录下创建本服务的软链接。

 

Service指令含义
User  
Group  
Type
  • simple:在fork出子systemd进程后,systemd就认为该服务启动成功了(通常设置为simple)
  • exec:在fork出子systemd进程且子systemd进程exec()调用ExecStart命令成功后,systemd认为该服务启动成功(采用sh脚本启动其他进程时Type须为forking)
ExecStart

指定启动服务时执行的命令行。

后方跟的参数查不到,勾八,中文互联网太烂了。我这个clash服务配置是抄的,他也不写为啥是-f,后边是配置文件能看得出来

ExecStop 指定停止服务时执行的命令行
Restart

指定systemd是否要自动重启服务进程以及什么情况下重启

RestartSec

重启倒计时