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" 定义环境变量

定时任务

创建同名的 service 和 timer 文件,可以启动定时任务,随后输入 systemctl enable --now 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

修改现有文件

修改已有的服务可以通过 systemctl edit foo.service 命令,在其中写入的任何内容都会被附加到已有的服务文件中,如果要替换一个可以多次设值的选项,应当先清空它

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

如果要完全的替换服务文件,应在输入编辑命令时加入 --full 参数,完成后使用 systemctl restart foo.service 重新加载