作者:Li_xuanyi
关于配置文件的结构
#这是常用的自定义服务的路径信息
#/etc/systemd/system/自定义服务.service
[Unit]
#必填项
Description= #当前服务的简单描述,没有太复杂,简单描述一下服务名称即可
#下面的属性视情况而选择
Environment= #环境变量或参数(系统环境变量此时无法使用)
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]
Type= #用于指定服务类型,有:"simple, exec, forking, oneshot, dbus, notify,notify-reload, idle"选项,一般选择simple类型即可,如果英语基础很好,可以自行翻看man手册(位于systemd.service中,查看命令为"man systemd.service")进行查看,下面是一些属性的简介
Type=simple #默认值,执行ExecStart指定的命令,启动主进程
Type=forking #以 fork 方式从父进程创建子进程,创建后父进程会立即退出
Type=oneshot #一次性进程执行一次后退出适合单纯的开机运行一次的脚本任务
Type=dbus #当前服务通过D-Bus启动
Type=notify #当前服务启动完毕,会通知Systemd,再继续往下执行
Type=idle #若有其他任务执行完毕,当前服务才会运行
ExecStart= #启动当前服务的命令
ExecStartPre= #启动当前服务之前执行的命令
ExecStartPost= #启动当前服务之后执行的命令
ExecReload= #重启当前服务时执行的命令
ExecStop= #停止当前服务时执行的命令
ExecStopPost= #停止当其服务之后执行的命令
RestartSec= #自动重启当前服务间隔的秒数
Restart= #定义何种情况失败时会自动重启当前服务,可能的值包括no(默认)always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec= #定义 Systemd 停止当前服务之前等待的秒数
Environment= #指定环境变量
[Install]
#第一个是必填属性
WantedBy= #它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中,一般填multi-user.target
RequiredBy= #它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
Alias= #当前 Unit 可用于启动的别名
Also= #当前 Unit 激活(enable)时,会被同时激活的其他 Unit
完成单元文件编写后如果不知道文件中的内容是否正确可以使用下面命令进行检查
systemd-analyze verify /path/to/yourserver.server
如果没有回显信息代表着单元文件语法正确
常见问题可能有文件权限不正确,一般单元文件不需要写权限,只需要保证root用户有读+运行权限即可
编写完成后必须重新加载systemd配置
systemclt deamon-reload #重新加载配置文件
#下面是一些常用的systemd管理命令
systemctl start your_service #启动服务
systemctl enable your_service #开机自动启动服务
#或者使用该命令设置开机启动服务并且立即启动
systemctl enable your_service -now
systemctl ststus your_service #检车服务状态
systemctl stop your_service #停止服务运行,需在单元文件中指定终止服务所进行的操作
ststemctl restart your_service #重新启动服务,需指定重启操作
systemctl disable your_service #取消服务的开机自启动
查看日志
journalctl -u your_service -f #查看实时日志
journalctl -u your_service --since today #查分当天日志
其他类型单元文件
定时器(可用cron代替)
定时器文件同样位于/etc/systemd/system/目录下,文件后缀为.timer
#simple.timer
[Timer]
onClaendar=*-*-* 00:00:00 #每天午夜执行
Unit= #关联的服务
[Install]
WantedBy=timers.target