将服务写成 systemd 服务简易版教程

systemd 服务的好处

方便启动、停止、重启、开机自启、停止自启、查看日志等功能

例如我们有个python程序example.py,我们需要它一直运行在后台。如果不用systemd的话一个选择是用 screen -S screen_name python example.py 命令。然而我们这样只能方便挂在后台、进去查看程序运行情况,并不能方便的实现停止后重新运行,开机自启等系列功能。

如果我们将这个封装成 systemd 服务的形式,就可以很方便的解决这个问题。

教程正文

要封装成 systemd 服务只需要编写一个 systemd 的配置文件。我们以封装成用户级 systemd 服务为例。

systemctl --user 的配置文件默认放在 $HOME/.config/systemd/user/ 下面。其余的默认目录可以自行搜索。

在这个目录下编写 service_name.service,简易模板为:

[Unit]
Description=your service description
After=(this service should run after that ) xxx (has been running)
# 例如:
# xxx = network.target: 整个服务只有在网络栈起来之后才会起
# xxx = B.service: 整个服务只有在B.service起来之后才会起

[Service]
Type=simple
WorkingDirectory=[你的程序运行目录]
ExecStart=[你要运行的命令]
Restart=always
RestartSec=10

[Install]
WantedBy=default.target

如何运行:

# 开机自启
systemctl --user enable pyasyncbot.service
# 运行
systemctl --user start pyasyncbot.service

修改了 service 文件后重新加载:

systemctl --user deamon-reload

除了上面所说的 $HOME/.config/systemd/user/ ,service 文件还会存在于 /etc/systemd/system/ 目录下面

下面给出个 awtrix systemd 文件样例:

[Unit]
Description=AWTRIX HOST
After=network.target

[Service]
WorkingDirectory=/usr/local/awtrix
Type=simple
ExecStart=/usr/bin/java -jar /usr/local/awtrix/awtrix.jar
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target