介绍
systemd service是一种以 .service 结尾的配置文件,是一个专用于 Linux 操作系统的系统与服务管理器。简单来说,用于后台以守护精灵(daemon)的形式运行程序。
示例及配置解释
systemd 服务的内容主要分为三个部分,控制单元 [Unit] 的定义、服务 [Service] 的定义、以及 [Install] 安装部分。
[Unit]
Description=Cloudreve
Documentation=https://docs.com
After=network.target
After=mysqld.service
Wants=network.target
[Service]
WorkingDirectory=/smb/tsg
ExecStart=/smb/tsg
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
[Install]
WantedBy=multi-user.target
[Unit]
Description | 服务描述 |
Documentation | 指定服务的文档,可以是一个或多个文档的URL路径。 |
Requires | 表示依赖于某服务,即某服务停止运行或退出,该服务也必须停止运行。 |
After | 表示该服务将在其他服务之后启动。这意味着该服务将在其他服务启动成功后启动。 |
Before | 与 After 相反,在启动当前服务后,再启动指定的服务。 |
Wants | 表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。 |
Conflicts | 与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。 |
OnFailure | 当这个模块启动失败时,就自动启动列出的每个模块。 |
`PartOf | 表示该服务是另一个服务的一部分。这意味着当该服务启动或停止时,将同时启动或停止其他服务。 |
[Service]
这个字段主要给出服务的启动行为,如何启动、重启、停止。
Type | 定义启动类型。它可以设置的值如下 |
simple | (默认值), 类型的服务是最常见的服务类型。这类服务通常是守护进程,在后台运行。 |
oneshot | 该类型的服务通常用于执行一次性的任务,例如升级软件。 |
dbus | 该类型的服务使用 D-Bus 框架来进行通信。 |
notify | 该类型的服务在启动或停止时发送通知。 |
idle | 该类型的服务在没有工作时进入空闲状态,以节省资源。 |
ExecStart | 定义启动进程时执行的命令。 |
ExecReload | 重启服务时执行的命令。 |
ExecStop | 停止服务时执行的命令。 |
ExecStartPre | 启动服务之前执行的命令。 |
ExecStartPost | 启动服务之后执行的命令。 |
ExecStopPost | 停止服务之后执行的命令。 |
KillMode | KillMode 字段用于指定如何杀死服务进程。KillMode 字段的值可以是以下几种: |
mixed | 这是默认的 KillMode 值。该模式下,systemd 会先尝试使用 SIGTERM 信号来杀死进程,如果失败,则会使用 SIGKILL 信号。 |
control-group | 该模式下,systemd 会杀死进程的控制组中的所有进程。 |
process | 只杀主进程。 |
process | 没有进程会被杀掉,只是执行服务的 stop 命令。 |
Restart | 定义了服务退出后,服务的重启方式。它可以设置的值如下: |
no | (默认值),退出后不会重启。 |
on-success | 只有正常退出时(退出状态码为0),才会重启。 |
on-failure | 非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启。 |
on-abnormal | 只有被信号终止和超时,才会重启。 |
on-abort | 只有在收到没有捕捉到的信号终止时,才会重启。 |
on-watchdog | 超时退出,才会重启。 |
always | 不管是什么退出原因,总是重启。 |
RestartSec | 示重启服务之前,需要等待的秒数。 |
RootDirectory | 指定服务进程的根目录,如果配置了这个参数后,服务将无法访问指定目录以外的任何文件。 |
WorkingDirectory | 指定服务的工作目录。 |
通过与谷歌bard的对话感觉这两个目录并没有用呀,设置WorkingDirectory的目录与Execstart为不同目录时,说是先切换到WorkingDirectory目录,然后再切换到Execstart目录。那WorkingDirectory有啥用?
当同时使用 RootDirectory 和 WorkingDirectory 时,WorkingDirectory 指定的目录必须在 RootDirectory 指定的目录中。
[Install]
用于指定服务的启动目标。Install 字段的值是一个或多个目标,这些目标将决定服务在哪些启动级别下启动。
WantedBy=multi-user.target | 表示服务将在多用户模式下启动,即在系统启动时运行。 |
然后将将编写好的service文件存放到/usr/lib/systemd/system下,然后使用systemctl管理服务。
管理服务
systemctl start nginx.service | 启动nginx服务 |
systemctl stop nginx.service | 停止nginx服务 |
systemctl restart nginx.service | 重启nginx服务 |
systemctl status nginx.service | 查看nginx服务状态 |
systemctl enable nginx.service | 设置nginx服务开机启动 |
systemctl disable nginx.service | 关闭nginx服务开机启动 |