开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 29 天,点击查看活动详情
服务器重启后,一步步启动各种程序是个非常麻烦也是容易出错的事情,遇到过不止一次,有某个服务忘记起来的情况,必须得彻底解决这种问题,这种情况我们可以尝试配置开机自启动。
环境
centos 7.5
我的版本跟低版本有很多不同,不能通过chkconfig add命令加入自启动,我们先进入目录
/lib/systemd/system
依次新建若干个服务:
- mysqld.service
[Unit]
Description=mysql
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/mysql.server
ExecReload=/bin/systemctl restart mysqld.service
ExecStop=/bin/systemctl stop mysqld.service
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/nginx
ExecReload=/usr/bin/nginx -s reload
ExecStop=/usr/bin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- php-fpm.service
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/php-fpm
ExecReload=ps -ef|grep php-fpm|awk '{print $2}' |xargs kill -USR2
ExecStop=ps -ef|grep php-fpm|awk '{print $2}'|xargs kill -INT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- Redis.service
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/Redis-server /usr/local/Redis-5.0.0/Redis.conf
ExecStop=/usr/local/Redis-5.0.0/Redis-cli shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
ExecStart, ExecStop, ExecReload各有不同,可根据业务自行修改
并且把尚需几个服务 systemctl enable 启动。
测试
完成后我们重启机器:
reboot
测试一下【别再生产随意reboot哟】,几个定义的服务都陆续启动成功。
systemctl 命令
-
systemctl enable nginx # 设置开机自启动 nginx
-
systemctl disable nginx # 停止开机自启动 nginx
-
systemctl start nginx # 启动 nginx 服务
-
systemctl stop nginx # 启动 nginx 服务
-
systemctl restart nginx # 重新启动启动 nginx
-
systemctl status nginx # 查看服务当前状态
-
systemctl list-units --type=service #查看所有已启动的服务
-
journalctl -u nginx # 查看 nginx 服务日志
参数说明
主要有以下三部分
- [unit] :定义与Unit类型无关的通用选项;用于提供unit的描述信息、 unit行为及依赖关系等
- [Service]:与特定类型相关的专用选项;此处为Service类型
- [Install]:定义由 systemctl enable 以及 systemctl disable 命令在实现服务启用或禁用时用到的一些选项
Service 参数:
- EnvironmentFile:环境配置文件
- ExecStart:启动unit要运行命令或脚本的绝对路径
- ExecStartPre: ExecStart 前运行
- ExecStartPost: ExecStart 后运行
- ExecRsload: 重启当前服务时执行的命令
- ExecStopPost:停止当前服务之后执行的命令
- ExecStartSec:自动重启当前服务间隔的秒数
- ExecStop:停止unit要运行的命令
- Restart:当服务意外终止后,是否再次自动启动此服务。可选择no, on success, on failure, on abnormal, on watchdog, on abort, or always。【设置为on-success,则仅当服务进程干净地退出时才会重新启动,watchdog这个不太清楚。。】
- TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数。
- Environment:环境变量
Install 参数:
- Alias:别名,可使用systemctl command Alias.service
- RequiredBy:被哪些 units 所依赖,强依赖
- WantedBy:被哪些 units 所依赖,弱依赖
- Also:安装本服务的时候还要安装别的相关服务