配置说明
[Unit]
Description=appName
ConditionPathExists=/data/app
[Service]
Restart=always
RestartSec=3
WorkingDirectory=/data/app
ExecStart=/data/app/main
ExecStop=/usr/bin/kill $MAINPID
ExecReload=/data/app/main
[Install]
WantedBy=multi-user.target
上面是一个简单的 systemd
配置,下面是每个字段的说明
配置文件中的路径尽量使用绝对路径
[Unit]
Description
对程序的描述,用作说明用途After
在该字段所指定的条件满足之后再运行,例子中的条件是连接网络之后再运行ConditionPathExists
开启服务前检查目录是否存在
[Service]
-
Type
类型,一般保持simple
即可,不用管 -
User
运行程序时所指定的用户,如果不清楚该用什么用户,用root即可,但是会有安全隐患,不推荐(可忽略) -
WorkingDirectory
工作目录,有时候可以省略这个字段,一般填写程序所在的目录,可以避免一些路径的问题 -
ExecStart
运行程序所执行的命令,必须使用绝对路径,因为systemd
是不管你的环境变量的,main
为可执行文件 -
RestartSec
重启服务之前,需要等待的秒数 -
ExecStop
停止服务执行的命令,所有的命令都必须是绝对路径的,所以kill
写的是绝对路径 -
ExecReload
重载服务执行的命令,执行reload
的时候会自动先执行stop
,所以这里不用再杀死进程了 -
Restart
重启方式- no(默认值):退出后不会重启
- on-success:只有正常退出时(退出状态码为0),才会重启
- on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
- on-abnormal:只有被信号终止和超时,才会重启
- on-abort:只有在收到没有捕捉到的信号终止时,才会重启
- on-watchdog:超时退出,才会重启
- always:不管是什么退出原因,总是重启
[Install]
WantedBy
需求它的target
,例子中的是用来实现开机启动的,一般不用改
使用
-
在
systemd
配置文件的目录下(一般为/etc/systemd/system
)新建一个扩展名为service
的文件,填入配置文件的内容即可,然后执行systemctl daemon-reload
,需要注意:对任何配置文件的任何修改都需要执行systemctl daemon-reload
来应用更改,否则会报错,除非你重启你的系统 -
然后就可以使用以下命令来控制程序了
systemctl start/stop/restart/status/enable/disable <name>
命令作用依次是
启动
/关闭
/重启
/查看日志
/启用开机启动
/关闭开机启动
,<name>
则是配置文件的文件名 -
查看开机自启状态
systemctl list-unit-files | grep <name>
参考:
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
https://www.yooomu.com/archives/194.html/comment-page-1
https://www.ctolib.com/topics-85856.html