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文件[自定义]



[Unit]Description=nginxAfter=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s stopPrivateTmp=true[Install]WantedBy=multi-user.target

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



[Unit]Description=phpAfter=network.target[Service]Type=forkingExecStart=/usr/local/php/sbin/php-fpmExecStop=/bin/pkill -9 php-fpmPrivateTmp=true[Install]WantedBy=multi-user.target

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



[Unit]Description=MySQL Community ServerAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.targetAlias=mysql.service[Service]User=mysqlGroup=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 worksExecStartPost=/usr/bin/mysql-systemd-start post# Give up if ping don't get an answerTimeoutSec=600#Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉Restart=alwaysPrivateTmp=false

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


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