编写Systemd服务脚本
Systemd的Service配置在/etc/systemd/system/
目录中,格式说明如下:
Unit区块
1 2 3 4 5 6 7 8 9 10
| Description:简单描述 Documentation:服务的启动文件和配置文件 Requires:当前Unit依赖的其他Unit,如果它们没有运行,当前Unit会启动失败 Wants:与当前Unit配合的其他Unit,如果它们没有运行,不影响当前Unit的启动 BindsTo:与Requires类似,它指定的Unit如果退出,会导致当前Unit停止运行 Before:如果该字段指定的Unit也要启动,那么必须在当前Unit之后启动 After:如果该字段指定的Unit也要启动,那么必须在当前Unit之前启动 Conflicts:这里指定的Unit不能与当前Unit同时运行 Condition...:当前Unit运行必须满足的条件,否则不会运行 Assert...:当前Unit运行必须满足的条件,否则会报启动失败
|
service区块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Type:定义启动时的进程行为,它有以下几种值。 Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以fork方式从父进程创建子进程,之后父进程会退出,子进程成为主进程 Type=oneshot:一次性进程,Systemd会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行 Type=idle:若有其他任务,则其他任务执行完毕,当前服务才会运行 ExecStart:启动当前服务的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当其服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况Systemd会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec:定义Systemd停止当前服务之前等待的秒数 Environment:指定环境变量
|
Install区块
1 2 3 4
| WantedBy:它的值是一个或多个Target,当前Unit激活时(enable)时,符号链接会放入/etc/systemd/system目录下面以Target名+.wants后缀构成的子目录中 RequiredBy:它的值是一个或多个Target,当前Unit激活时,符号链接会放入/etc/systemd/system目录下面以Target名+.required后缀构成的子目录中 Alias:当前Unit可用于启动的别名 Also:当前Unit激活(enable)时,会被同时激活的其他Unit
|
例子
编写脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| vi /etc/systemd/system/demo.service [Unit] Description=Demo Server Before= After=network.target After=syslog.target
[Service] Type=simple LimitNOFILE=65535 ExecStart="执行的命令" ExecReload=/bin/kill -USR1 $MAINPID Restart=always
[Install] WantedBy=multi-user.target graphical.target
|
重载
1
| systemctl --system daemon-reload
|
启动,停止和重启
1 2 3 4 5 6
| # 启动 service demo start # 停止 service demo stop # 重启 service demo restart
|
查看日志
1
| journalctl -f -u demo.service
|