CentOS7/Linux开机自启动Nginx/PHP-FPM/mysqld
- 发表于
- Linux
CentOS7/Linux开机自启动
懒人运维必备get,服务器每次重启,都需要手动启动一些服务,快用脚本来提升一点效率吧,体验盒子分享三个(nginx/php/mysql)最常用的开机自启动脚本。开机自启动的实现是通过服务管理来控制的。
Linux服务管理service和systemctl
CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,systemctl服务管理的配置和service相比变的简单而易用了许多。
service
service命令其实是去/etc/init.d
目录下,去执行相关程序,在低版本的Linux中使用service进行服务管理很常见。但在centos 7中我们有了更好的选择systemctl。
1 2 3 4 5 6 7 8 |
# service命令启动redis脚本 $ service redis start # 直接启动redis脚本 $ /etc/init.d/redis start # 开机自启动 $ update-rc.d redis defaults |
systemctl
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/
,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,最好还是存在系统服务里面,即:/usr/lib/systemd/system
目录下,每一个服务以.service
结尾,一般会分为3部分:[Unit]、[Service]和[Install]
systemctl命令兼容了service,即systemctl也会去/etc/init.d
目录下,查看,执行相关程序:
1 2 3 4 5 |
$ systemctl redis start $ systemctl redis stop # 开机自启动 systemctl enable redis |
systemctl常用命令
systemctl --version
:查看版本。whereis systemctl
:查看位置。systemctl list-unit-files
:列出所有可用单元(服务)。systemctl list-units
:列出所有运行中的单元。systemctl --failed
:列出所有失败的单元。systemctl list-unit-files | grep enable
:查看自启动的软件。systemctl is-enabled mysqld.service
:查看某个单元是否开机启动。systemctl status mysqld.service
:查看某个单元的状态。systemctl start mysqld.service
:启动某个单元。systemctl restart mysqld.service
:重启某个单元。systemctl stop mysqld.service
:停止某个单元。systemctl daemon-reload
:修改了某个单元的配置文件后,重载配置文件。systemctl reload mysqld.service
:重载某个单元。systemctl enable mysqld.service
:设置开机自启动。systemctl disable mysqld.service
:关闭开机自启动。systemctl kill mysqld
,杀死单元。
CentOS7开机自启动Nginx/PHP-FPM/mysqld
我们可以使用systemctl -a
来查看所有服务,如果列表里面没有Nginx,PHP、Mysql,又想借助于systemctl来进行统一管理的话,就到上述所说的/usr/lib/systemd/system
目录下面创建以下文件吧
Nginx开机自启动:nginx.service
创建配置
1 |
vim /usr/lib/systemd/system/nginx.service |
配置自启动内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target |
PHP开机自启动:php.service
创建配置
1 |
vim /usr/lib/systemd/system/php.service |
配置自启动内容
1 2 3 4 5 6 7 8 9 10 11 12 |
[Unit] Description=php After=network.target [Service] Type=forking ExecStart=/usr/local/php/sbin/php-fpm ExecStop=/bin/pkill -9 php-fpm PrivateTmp=true [Install] WantedBy=multi-user.target |
Mysql开机自启动:mysqld.service
创建配置
1 |
vim /usr/lib/systemd/system/mysqld.service |
配置自启动内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[Unit] Description=MySQL Community Server After=network.target After=syslog.target [Install] WantedBy=multi-user.target Alias=mysql.service [Service] User=mysql Group=mysql #systemctl status就是根据pid来判断服务的运行状态的 PIDFile=/var/run/mysqld/mysqld.pid # 以root权限来启动程序 PermissionsStartOnly=true # 设置程序启动前的必要操作。例如初始化相关目录等等 ExecStartPre=/usr/bin/mysql-systemd-start pre # 启动服务 ExecStart=/usr/bin/mysqld_safe # Don't signal startup success before a ping works ExecStartPost=/usr/bin/mysql-systemd-start post # Give up if ping don't get an answer TimeoutSec=600 #Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉 Restart=always PrivateTmp=false |
上述文件创建完成后,只要使用systemctl enable
命令就可以将所编写的服务添加至开机启动了。例如:
1 2 3 4 5 6 7 8 9 10 11 |
# 重新载入 systemd $ systemctl daemon-reload # 将php服务添加至开机启动。执行enable命令后,会自动创建一个软链接/etc/systemd/system/multi-user.target.wants/php.service指向此文件。 $ systemctl enable php.service $ Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. # 启动和查看php是否已设置为开机启动 $ systemctl start php $ systemctl status php.service $ systemctl is-enabled php.service |
脚本命令说明
- [Unit]:主要是对这个服务的说明,内容包括Description和After,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命令。
原文连接
的情况下转载,若非则不得使用我方内容。