此教程以一个可执行程序/usr/bin/gost,配置文件/etc/gost/gost.json为例

编写.service文件

.service文件示例

[Unit]
Description=Gost
Documentation=https://docs.ginuerzh.xyz/gost/
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/gost -C /etc/gost/gost.json
Restart=always
RestartSec=15
LimitNOFILE=655360

[Install]
WantedBy=multi-user.target

[unit] 区块

启动顺序与依赖关系

  • Description当前服务的简单描述
  • Documentation当前服务文档描述
  • After定义启动顺序,以上示例为加载network.target后启动服务

[service] 区块

启动行为

  • Type启动类型。simple(默认值):ExecStart字段启动的进程为主进程
  • ExecStart定义启动进程时执行的命令
  • Restart服务中断后尝试自动重启服务的方式,always为总是尝试重启
  • RestartSec重启间隔时间
  • LimitNOFILE打开文件数

[install] 区块

安装这个配置文件的行为

  • WantedBy指定单元如何被启用。启用该指令后,在/etc/systemd/system中会创建一个以指定单元命名的目录,并在目录末尾加上.wants。在这个目录中,将创建一个指向当前单元的符号链接,以建立依赖关系。例如,如果当前单元的WantedBy=multi-user.target,就会在/etc/systemd/system中创建一个名为multi-user.target.wants的目录(如果还没有的话),并在其中放置一个指向当前单元的符号链接。禁用该单元后,将删除该链接并消除依赖关系。

开机启动

将上述文件添加到/usr/lib/systemd/system目录,并执行下列命令

# systemctl enable gost.service

上面的命令相当于在/etc/systemd/system目录添加一个符号链接,指向/usr/lib/systemd/system里面的gost.service文件。

这是因为开机时,Systemd只执行/etc/systemd/system目录里面的配置文件。这也意味着,如果把修改后的配置文件放在该目录,就可以达到覆盖原始配置的效果。

启动服务

设置开机启动以后,软件并不会立即启动,必须等到下一次开机。如果想现在就运行该软件,那么要执行

# systemctl start gost.service

查看服务状态

# systemctl status gost.service

停止服务

# systemctl stop gost.service

参考文档

Systemd 入门教程:实战篇 - 阮一峰的网络日志 (ruanyifeng.com)

Understanding Systemd Units and Unit Files | DigitalOcean

systemd.service (www.freedesktop.org)

Last modification:March 8, 2022
If you think my article is useful to you, please feel free to appreciate