使用systemctl设置Nginx、PHP、Mysql开机启动

  • 更新时间:3年零306天前
  • 浏览量:13567
  • 发布人:思过崖

CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,说实在的,变的简单而易用了许多。

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,最好还是存在系统服务里面,即:/usr/lib/systemd/system目录下,每一个服务以.service结尾,一般会分为3部分:[Unit][Service][Install]

我们可以使用systemctl -a来查看所有服务,如果列表里面没有Nginx,PHP、Mysql,又想借助于systemctl来进行统一管理的话,就到上述所说的/usr/lib/systemd/system目录下面创建以下文件吧

Nginx之nginx.service文件[自定义]

  1. [Unit]
  2. Description=nginx
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. PIDFile=/usr/local/nginx/logs/nginx.pid
  7. ExecStart=/usr/local/nginx/sbin/nginx
  8. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  9. ExecStop=/usr/local/nginx/sbin/nginx -s stop
  10. PrivateTmp=true
  11. [Install]
  12. WantedBy=multi-user.target

PHP之php.service文件[自定义]

  1. [Unit]
  2. Description=php
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. ExecStart=/usr/local/php/sbin/php-fpm
  7. ExecStop=/bin/pkill -9 php-fpm
  8. PrivateTmp=true
  9. [Install]
  10. WantedBy=multi-user.target

Mysql之mysqld.service文件[安装的时候软件自动生成]

  1. [Unit]
  2. Description=MySQL Community Server
  3. After=network.target
  4. After=syslog.target
  5. [Install]
  6. WantedBy=multi-user.target
  7. Alias=mysql.service
  8. [Service]
  9. User=mysql
  10. Group=mysql
  11. #systemctl status就是根据pid来判断服务的运行状态的
  12. PIDFile=/var/run/mysqld/mysqld.pid
  13. # 以root权限来启动程序
  14. PermissionsStartOnly=true
  15. # 设置程序启动前的必要操作。例如初始化相关目录等等
  16. ExecStartPre=/usr/bin/mysql-systemd-start pre
  17. # 启动服务
  18. ExecStart=/usr/bin/mysqld_safe
  19. # Don't signal startup success before a ping works
  20. ExecStartPost=/usr/bin/mysql-systemd-start post
  21. # Give up if ping don't get an answer
  22. TimeoutSec=600
  23. #Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
  24. Restart=always
  25. PrivateTmp=false

上述文件创建完成后,只要使用systemctl enable 命令就可以将所编写的服务添加至开机启动了。例如:

  1. #将php服务添加至开机启动。执行enable命令后,会自动创建一个软链接/etc/systemd/system/multi-user.target.wants/php.service指向此文件。
  2. systemctl enable php.service
  3. #查看php是否已设置为开机启动
  4. systemctl is-enabled php.service

注意:

[Unit]部分主要是对这个服务的说明,内容包括DescriptionAfter,Description用于描述服务,After用于描述服务类别

[Service]部分是服务的关键,是服务的一些具体运行参数的设置,这里 Type=forking是后台运行的形式,PIDFile为存放PID的文件路径,
ExecStart为服务的具体运行命令,ExecReload为重启命令,ExecStop为停止命令,PrivateTmp=True表示给服务分配独立的临时空间。[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!

[Install]部分是服务安装的相关设置,可设置为多用户的

服务脚本按照上面编写完成后,以754的权限保存在/usr/lib/systemd/system目录下,这时就可以利用systemctl进行配置了

使用systemctl start [服务名(也是文件名)]可以测试服务是否可以成功运行,如果不能运行则可以使用systemctl status [服务名(也是文件名)]查看错误信息和其他服务信息。然后根据报错进行修改,直到可以start,如果不放心还可以测试restart和stop命令