Linuxsystemdserivice
Linux_systemd_serivice
[toc]
Systemd 添加自定义服务(开机自启动) (opens new window)
# basic
systemctl enable mysqld
systemctl disable mysqld
systemctl start mysqld
systemctl stop mysqld
systemctl restart mysqld
systemctl status mysqld
systemctl is-active sshd.service
systemctl kill mysqld # 结束服务进程(服务无法停止时)
2
3
4
5
6
7
8
# example
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# [Unit]
Description:当前服务的简单描述
After:sshd.service 在 network.target 或 sshd-keygen.service 之后启动
Before:定义 sshd 应该在哪些服务之前启动
- 注意:After 和 Before 字段只涉及启动顺序,不涉及依赖关系。
Wants:存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service 继续执行。
Requires:表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service 也必须退出。
- 注意:Wants 字段与 Requires 字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动。
# [Service]
EnvironmentFile:许多软件都有自己的环境参数文件,该字段指定文件路径
Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle
- simple(设置了 ExecStart= 但未设置 BusName= 时的默认值):ExecStart 字段启动的进程为该服务的主进程
- forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程
ExecStart:定义启动进程时执行的命令
上面的例子中,启动 sshd 执行的命令是 /usr/sbin/sshd -D $OPTIONS,其中的变量 $OPTIONS 就来自 EnvironmentFile 字段指定的环境参数文件。类似的,还有如下字段:
ExecReload:重启服务时执行的命令
ExecStop:停止服务时执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令
RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行
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:不管是什么退出原因,总是重启
RestartSec:表示 Systemd 重启服务之前,需要等待的秒数
所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行:EnvironmentFile=-/etc/sysconfig/sshd
# [Install]
- WantedBy:表示该服务所在的 Target(服务组)
- 常用的 Target 有两个:
- 一个是 multi-user.target,表示多用户命令行状态;
- 一个是 graphical.target,表示图形用户状态,它依赖于 multi-user.target
# e.g.(simple)
[Unit]
Description=Telnet Service
After=network.target
[Service]
Type=forking
ExecStart=/sbin/telnetd -p 23
[Install]
WantedBy=multi-user.target
2
3
4
5
6
7
8
9
10