centos7,ubuntu18都使用了 systemd 作为系统服务管理工具, 并推荐使用这种方式管理服务.
以 redis 服务为例,说明如何为Ubuntu配置自定义的service。
- 首先在/lib/systemd/system/目录下,创建服务脚本:redis-server.service
[Unit]
Description=Redis server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/bin/bash -c '/opt/redis/bin/redis-server /opt/redis/redis.conf'
ExecStop=/bin/bash -c '/opt/redis/bin/redis-cli shutdown'
Restart=always
PrivateTmp=true
[Install]
WantedBy=multi-user.target
说明:
- 用于识别服务的是文件名,而不是 Description。
- ExecStart,ExecStop,Restart这些参数的值中放的脚本应该是立即返回的,否则启动服务时会超时。
- 参数中的命令使用的shell可能不是bash,很多命令、格式不识别,比如需要绝对路径,比如&放后台命令,这时显式的调用bash是一种方法。
-
systemctl status redis-server.service
可以查看当前服务的日志。 - 记录pid文件在redis.conf里配置,默认为 /var/run/redis_6379.pid
- Restart=always, 表示服务挂掉后立即重启. 其他取值及其含义如下.
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启
- 设置让脚本开机自动启动
sudo systemctl daemon-reload
sudo systemctl enable redis-server.service
- 常用命令
重新加载service文件:sudo systemctl daemon-reload
启动一个服务:sudo systemctl start redis-server.service
关闭一个服务:sudo systemctl stop redis-server.service
重启一个服务:sudo systemctl restart redis-server.service
显示一个服务的状态:systemctl status redis-server.service
在开机时启用一个服务:sudo systemctl enable redis-server.service
在开机时禁用一个服务:sudo systemctl disable redis-server.service
查看服务是否开机启动:systemctl is-enabled redis-server.service
查看已启动的服务列表:systemctl list-unit-files | grep enabled
查看启动失败的服务列表:systemctl --failed
网友评论