1. 什么是systemd service

systemd service是一种以 .service 结尾的配置文件,是一个专用于 Linux 操作系统的系统与服务管理器。简单来说,用于后台以守护精灵(daemon)的形式运行程序。
systemd 服务的内容主要分为三个部分,控制单元 [Unit] 的定义、服务 [Service] 的定义、以及 [Install] 安装部分。

2. 示例详解

[Unit]     				
Description=httpd	    #当前配置文件的描述信息
After=network.target    #表示当前服务是在那个服务后面启动,一般定义为网络服务启动后启动

[Service]				
Type=forking			#定义启动类型
ExecStart=/usr/local/apache/bin/apachectl start 	#定义启动进程时执行的命令。
ExecReload=/usr/local/apache/bin/apachectl restart  #重启服务时执行的命令
ExecStop=/usr/local/apache/bin/apachectl stop		#定义关闭进程时执行的命令。
PrivateTmp=true										#是否分配独立空间

[Install]
WantedBy=multi-user.target    #表示多用户命令行状态

2.1 Unit字段

这个字段主要给出服务描述、启动顺序和依赖关系。

Description字段给出当前服务的简单描述。
Documentation字段给出文档位置。
After字段表示在什么服务之后启动。
Before字段表示在什么服务之前启动。  
After和Before字段只涉及启动顺序,不涉及依赖关系。

Wants字段表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。
Requires字段则表示”强依赖”关系,即某服务停止运行或退出,改服务也必须停止运行。
Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。

2.2 Service字段

这个字段主要给出服务的启动行为,如何启动、重启、停止。

 Type字段:定义启动类型。它可以设置的值如下:
 - simple(默认值):ExecStart字段启动的进程为主进程
 - forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
 - oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
 - dbus:类似于simple,但会等待 D-Bus 信号后启动
 - notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
 - idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混
 ExecStart字段:定义启动进程时执行的命令,就是手动启动时执行的命令。
 ExecReload字段:重启服务时执行的命令。
 ExecStop字段:停止服务时执行的命令。
 ExecStartPre字段:启动服务之前执行的命令。
 ExecStartPost字段:启动服务之后执行的命令。
 ExecStopPost字段:停止服务之后执行的命令。
 KillMode字段:定义 Systemd 如何停止 sshd 服务。它可以设置的值如下:
 -  control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
 -  process:只杀主进程
 -  mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
 -  none:没有进程会被杀掉,只是执行服务的 stop 命令
 Restart字段:定义了 sshd 退出后,Systemd 的重启方式。它可以设置的值如下:
 - no(默认值):退出后不会重启
 - on-success:只有正常退出时(退出状态码为0),才会重启
 - on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
 - on-abnormal:只有被信号终止和超时,才会重启
 - on-abort:只有在收到没有捕捉到的信号终止时,才会重启
 - on-watchdog:超时退出,才会重启
 - always:不管是什么退出原因,总是重启
 
对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。
 RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。
user字段可以设置服务的用户名
WorkingDirectory字段指定服务的安装目录

2.3 Install字段

该字段定义如何安装这个配置文件,即怎样做到开机自启。

 WantedBy字段:表示该服务所在的 Target。
 Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是服务所在的Target是multi-user.target

 Systemd 有默认的启动 Target。就是multi-user.target,在这个组里的所有服务,都将开机启动。

查看 multi-user.target 包含的所有服务
systemctl list-dependencies multi-user.target
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐