一:配置文件内容
systemd服务配置文件存放在/usr/lib/systemd
目录下,有系统system和用户user之分,需要开机不登录就能运行的程序,放在/usr/lib/systemd/system/
目录下,每一个服务以.service结尾,配置文件分为3部分,[Unit]、[Service]、[Install]
。
[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]
字段 说明 依赖 After 表示服务需要在***服务启动之后执行 无依赖 Before 表示服务需要在***服务启动之前执行 无依赖 Wants 弱依赖关系 无 Requires 强依赖关系 ***停止之后本服务也必须停止 -
[Service]
字段 说明 依赖 ExecStart 启动进程时执行的命令 无 ExecReload 重启服务时执行的命令 无 ExecStop 停止服务时执行的命令 无 ExecStartPre 启动服务之前执行的命令 无 ExecStartPost 启动服务之后执行的命令 无 ExecStopPost 停止服务之后执行的命令 无 [types]
| 字段|说明|备注|
|:-😐 - |
|simple|ExecStart字段启动的进程为主进程|
|forking|ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程|
|oneshot|类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务|
|dbus|类似于simple,但会等待 D-Bus 信号后启动|
|notify|类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务|
|idle|类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合|[KillMode]
字段 说明 备注 control-group 当前控制组里面的所有子进程,都会被杀掉 默认值 process 只杀主进程 mixed 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 none 没有进程会被杀掉,只是执行服务的 stop 命令 [Restart]
字段 说明 备注 no 退出后不会重启 默认值 on-success 只有正常退出时(退出状态码为0),才会重启 on-failure 非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 on-abnormal 只有被信号终止和超时,才会重启 on-abort 只有在收到没有捕捉到的信号终止时,才会重启 on-watchdog 超时退出,才会重启 always 不管是什么退出原因,总是重启 -
[Install]
Install区块,定义如何安装这个配置文件,即怎样做到开机启动。
WantedBy字段:表示该服务所在的 Target。
Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target。
这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。
Systemd 有默认的启动 Target:systemctl get-default multi-user.target
上面的结果表示,默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因。
使用target的时候,systemctl list-dependencies
命令和systemctl isolate
#查看 multi-user.target 包含的所有服务 $ systemctl list-dependencies multi-user.target #切换到另一个 target #shutdown.target 就是关机状态 $ sudo systemctl isolate shutdown.target
一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target
二:配置文件位置
/usr/lib/systemd/system
/etc/systemd/system/
/etc/systemd/system/
- /usr/lib/systemd/system
- /etc/systemd/system/
- /etc/systemd/system/
三:开机启动配置
生成的软链接文件不可以直接拷贝到根文件系统源文件中,但是可以压缩以后再拷贝。
四:systemctl使用
指令 | 说明 |
---|---|
systemctl start ssh.service | 启动sshd服务 |
systemctl stop ssh.service | 停止sshd服务 |
systemctl status ssh.service | 查看sshd服务状态 |
systemctl status | 查看所有服务状态 |
systemctl restart ssh.service | 重启sshd服务 |
systemctl enable ssh.service | 设置开机自启动 |
systemctl disable ssh.service | 禁止开机自启动 |
systemctl list-units --type=service | 查看所有已经启动的服务 |
centered systemctl daemon-reload | 重新加载配置文件 |