一、CentOS7 服务管理方式
CentOS 7 使用systemctl命令管理服务,基本常用命令:
systemctl start ssh # 启动ssh服务
systemctl stop ssh # 停止ssh服务
systemctl restart ssh # 重新启动ssh服务
systemctl reload ssh # 重新启动ssh服务
systemctl status ssh # 查看ssh服务的状态
systemctl is-active ssh # 查看服务是否为开机启动
systemctl enable ssh # 设置服务为开机启动
systemctl disable ssh # 取消服务的开机启动
注:更多systemctl的命令,请自行百度;这里值列举几个常用的命令。
二、编写.service配置文件说明
1、[unit]区块:设置管理启动顺序与依赖关系
配置项 | 描述 |
Description=服务描述 | 给出当前服务的简单描述 |
Documentation=路径或url | 给出文档位置 |
After=服务.target或服务.service | 定义在某些服务之后启动。例如sshd服务启动必须在network.target sshd-keygen.service服务开启之后才能启动,可以使用如下命令查看sshd服务的配置cat /usr/lib/systemd/system/sshd.service |
Before=服务.target | 定义在某些服务之前启动 |
Wants=服务.service | 弱依赖,表示等号填写服务启动或失败,不影响此配置文件服务的启动 |
Requires=服务.service | 强依赖,表示等号填写服务启动或失败,那么此配置文件的服务将启动失败 |
注意:如果After、Before、Wants、Requires等号后面需要填写多个服务可以用空格隔开。After和Before字段只涉及启动顺序,不涉及依赖关系。Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
2、[Service]区块:设置启动行为
- 启动命令
配置项 | 描述 |
ExecStart=命令 | 定义启动进程时执行的命令 |
ExecReload=命令 | 重启服务时执行的命令 |
ExecStop=命令 | 停止服务时执行的命令 |
ExecStartPre=命令 | 启动服务之前执行的命令 |
ExecStartPost=命令 | 启动服务之后执行的命令 |
ExecStopPost=命令 | 停止服务之后执行的命令 |
所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。例如:ExecStop=-/bin/sh /server/scripts/xx.sh
- 启动类型 Type字段定义启动类型。它可以设置的值如下:
配置项 | 描述 |
simple(默认值) | ExecStart字段启动的进程为主进程 |
forking | ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程(后台运行) |
oneshot | 类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务 |
dbus | 类似于simple,但会等待 D-Bus 信号后启动 |
notify | 类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务 |
idl | 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合 |
- 重启行为
KillMode字段,定义Systemd如何停止服务,它可以设置的值如下
配置项 | 描述 |
control-group(默认值) | 当前控制组里面的所有子进程,都会被杀掉 |
process | 只杀主进程 |
mixed | 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 |
none | 没有进程会被杀掉,只是执行服务的 stop 命令 |
Restart字段,定义了服务退出后,Systemd的重启方式,它可以设置的值如下
配置项 | 描述 |
no(默认值) | 退出后不会重启 |
on-success | 只有正常退出时(退出状态码为0),才会重启 |
on-failure | 非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 |
on-abnormal | 只有被信号终止和超时,才会重启 |
on-abort | 只有在收到没有捕捉到的信号终止时,才会重启 |
on-watchdog | 超时退出,才会重启 |
always | 不管是什么退出原因,总是重启 |
- service区块的其他一些字段
配置项 | 描述 |
EnvironmentFile=文件路径 | 指定当前服务的环境参数文件 |
RestartSec=数值 | 表示Systemd重启服务之前,需要等待的秒数 |
PIDFile=PID文件路径 | PID进程文件 |
KillSignal=信号量 | 停止信号量,值一般为SIGQUIT |
TimeoutStopSec=数值 | 停止超时时间 |
PrivateTmp=布尔值 | 独立空间true或false,即文件系统名字空间的配置将被该命令行启动的进程忽略 |
更多配置详解点击:http://www.jinbuguo.com/systemd/systemd.service.html
3、[Install]区块:定义如何安装这个配置文件,即怎样做到开机启动
这个设置非常重要,如果设置开机自启动,在/etc/systemd/system目录下面的multi-user.target.wants子目录之中机会创建一个服务的软链接
WantedBy字段,表示该服务所在的 Targe,target的含义是服务组,表示一组服务,它可以设置的值如下
配置项 | 描述 |
multi-user.target | 表示多用户命令行状态 |
graphical.target | 表示图形用户状态,它依赖于multi-user.target |
三、注册服务实例
配置文件目录
文件类型 | 文件位置 |
systemctl脚本目录 | /usr/lib/systemd/ |
系统服务目录 | /usr/lib/systemd/system/ |
用户服务目录 | /usr/lib/systemd/system/ |