这里总结了一些常用的systemd service模板,以供后来参考。

1 裸服务

直接使用systemd运行一些小型的服务,不需要收集日志、不需要经常查看具体的运行状态的时候使用。特点是快捷方便,没有副作用。

[Unit]
Description=Server Status Client Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/python3 $PWD/client-linux.py SERVER=server.claws.top USER=s07 >/dev/null 2>&1

[Install]
WantedBy=multi-user.target

只需要将ExecStart处换成自己的命令就可以了。如果是不需要什么权限的操作,也可将User改成nobody会比较安全。

2 screen 服务

在后台创建一个screen,可以方便地监控服务运行的状态。

[Unit]
Description=Minecraft Server
After=network.target

[Service]
WorkingDirectory=/home/claws/app/mc
User=claws
KillMode=none
Type=forking
ExecStart=/usr/bin/screen -dmS mc ./run.sh
ExecReload=/usr/bin/screen -dr mc -X eval 'stuff "reload"\\015'
ExecStop=/usr/bin/screen -dr mc -X eval 'stuff "say SERVER SHUTTING DOWN. Saving map..."\\015'
ExecStop=/usr/bin/screen -dr mc -X eval 'stuff "save-all"\\015'
ExecStop=/usr/bin/screen -dr mc -X eval 'stuff "stop"\\015'
ExecStop=/usr/bin/sleep 10s
Restart=on-failure

[Install]
WantedBy=multi-user.target

ExecStop可以分为多个步骤,例如这里的MC服务器的例子,就把结束的服务分为好几个阶段,先对玩家发出警告,然后再关闭服务器。