centos7设置开机自启动

203 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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:安装本服务的时候还要安装别的相关服务

参考