Systemd 服务

systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序

系统级单元路径:

  • /usr/lib/systemd/system/ 软件包单元
  • /etc/systemd/system/ 系统管理员单元

用户级单元路径:

  • /usr/lib/systemd/user/ 软件包单元
  • ~/.local/share/systemd/user/ 家目录中的软件包单元
  • /etc/systemd/user/ 系统管理员指定的用户单元
  • ~/.config/systemd/user/ 用户单元

单元文件

[Unit]
Description=描述
[Service]
ExecStart=启动命令
Restart=on-failure
[Install]
#WantedBy=default.target #用户级单元使用
WantedBy=multi-user.target

可以通过 Environment="a=1" 定义环境变量

创建一个新服务

如果存在同名文件,会直接覆盖

systemctl edit --force --full foo.service

链接文件

创建一个软链接,指向该文件

systemctl link ./foo.service

查看已有服务

查看已有的服务由哪些文件组成,并显示内容

systemctl cat foo.service

修改现有服务

会在 foo.server 同级目录中创建一个 foo.service.d/override.conf 文件,并记录修改的内容,随后会附加到 foo.server 中

如果要完全的替换现有服务文件,应加入 --full 参数,随后正常按照新的文件来写

systemctl edit foo.service

如果要替换一个可以多次设值的选项,应当先清空该项,例如

[Service]
ExecStart=
ExecStart=/bin/foo --help

修改完成后需要重新启动服务

定时任务

创建同名的 service 和 timer 文件,可以启动定时任务,随后启动 foo.timer 即可

/etc/systemd/system/foo.service

[Unit]
Description=foo
[Service]
#WorkingDirectory=/opt #指定工作目录
ExecStart=/bin/foo

/etc/systemd/system/foo.timer

[Unit]
Description=foo at 2:00 and 19:00
[Timer]
OnCalendar=*-*-* 2,19:00:00 # 每天 2 点和 19 点
[Install]
WantedBy=multi-user.target