差异

centos6之前都是用service xxx restart,实际服务启动脚本路径在/etc/init.d/目录下.
centos7使用了systemctl管理服务.实际服务启动脚本路径在/usr/lib/systemd/system目录下.

常用systemctl命令

  1. #查看哪些服务开机自启动
  2. [root@localhost ~]# systemctl list-unit-files --type service |grep enabled
  3. #查看本机哪些服务在跑
  4. [root@localhost ~]# systemctl list-units --type=service --all
  5. #查看服务详细信息
  6. [root@localhost ~]# systemctl status sshd.service
  7. #服务开机自启动
  8. [root@localhost ~]# systemctl enable sshd.service
  9. #禁止服务开机自启动
  10. [root@localhost ~]# systemctl disable sshd.service
  11. #启动
  12. [root@localhost ~]# systemctl start sshd.service
  13. #关闭
  14. [root@localhost ~]# systemctl stop sshd.service
  15. #重启
  16. [root@localhost ~]# systemctl restart sshd.service
  17. #重载
  18. [root@localhost ~]# systemctl reload sshd.service
  19. #查看启动失败的服务
  20. [root@localhost ~]# systemctl --failed

service服务配置文件详解

[root@localhost ~]# ls /usr/lib/systemd/system/*.service

#举例sshd
[root@localhost ~]# systemctl cat sshd.service
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

服务配置文件分Unit/Service/Install三个区块

[Unit]

Description字段 说明
Documentation字段 帮助文档
After字段 表示等待network.target sshd-keygen.service这两个服务启动之后再启动sshd服务
Wants字段 弱依赖,表示sshd-keygen.service启动失败,也不影响sshd服务

[Service]

Type字段 说明这个服务的启动方式,会影响到ExecStart,主要有下面几种类型,常用一般simple:
simple:默认值,这个服务主要由ExecStart设置的程序来启动,启动后常驻于内存中。
forking:由ExecStart指定的启动的程序通过spawns产生子进程提供服务,然后父进程退出。
oneshot:与 simple 类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。
dbus:与 simple 类似,但这个服务必须要在取得一个 D-Bus 的名称后,才会继续运行!因此设置这个项目时,通常也要设置 BusName= 才行。
idle:与 simple 类似,意思是,要执行这个服务必须要所有的工作都顺利执行完毕后才会执行。这类的服务通常是开机到最后才执行即可的服务。
notify:与 simple 类似,但这个服务必须要收到一个 sd_notify() 函数发送的消息后,才会继续运行。
EnvironmentFile字段 指定一个文件内容为环境变量,文件里面是key-value键值对.
ExecStart字段 启动命令
ExecReload字段 重载命令
KillMode字段 定义 Systemd 如何停止 sshd 服务。
将KillMode设为process,表示只停止主进程,不停止任何sshd 子进程,即子进程打开的 SSH session 仍然保持连接。这个设置不太常见,但对 sshd 很重要,否则你停止服务的时候,会连自己打开的 SSH session 一起杀掉。
KillMode字段可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
process:只杀主进程
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:没有进程会被杀掉,只是执行服务的 stop 命令。
Restart字段 设置进程意外关闭
Restart字段可以设置的值如下:
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启
  对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。
  最后是RestartSec字段。
RestartSec字段 表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待42秒。

[Install]

WantedBy字段 如何安装这个配置文件,及如何开机自启动.一般设置为multi-user.target

模板文件-prometheus.service

# /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
Documentation=
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/prometheus
ExecStart=/opt/prometheus/prometheus
ExecStop=/bin/kill -KILL $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure
RestartSec=3s

[Install]
WantedBy=multi-user.target