参考: https://linuxhandbook.com/create-systemd-services/
参考: https://wiki.debian.org/systemd/documentation
参考: https://wiki.archlinuxcn.org/wiki/Systemd
参考:https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
ubuntu系统教程: https://ubuntu.com/
[Unit]
[Service]
[Install] systemd服务文件的三个重要且必要的部分
.serivce systemd服务文件的扩展名
# systemd服务文件的单行注释符
1.systemd 服务文件的示例
[Unit]
Description=Apache web server
After=network.target
Before=nextcloud-web.service
[Service]
ExecStart=/usr/local/apache2/bin/httpd -D FOREGROUND -k start
ExecReload=/usr/local/apache2/bin/httpd -k graceful
Type=notify
Restart=always
[Install]
WantedBy=default.target
RequiredBy=network.target
这是 systemd 服务文件的最基本结构。让我们了解这些词中的每一个的含义。
2.[Unit] 部分
下表列出了 [Unit] 部分的重要选项
Description
单元的有意义的描述。这个文本显示在 systemctl status 命令的输出中
Documentation
提供单元参考文档的 URI 列表
After
定义启动单位的顺序。这个单元仅在 After 中指定的单元处于活跃状态后才启动。与 Requires 不同,After 不会显式激活指定的单元。Before 选项与 After 的功能相反
Requires
配置其它单元上的依赖关系。Requires 中列出的单元与单元一同被激活。如果任何需要的单元无法启动,则该单位就不会被激活。
Wants
配置比 Requires 更弱的依赖项。如果列出的单元没有成功启动,它对单元激活不会有影响。这是建立自定义单元依赖项的建议方法。
Conflicts
配置负的依赖关系,与 Requires 相反
3.[Service] 部分
Type
配置影响 ExecStart 功能的单元进程启动类型和相关选项。其中之一:
* simple - 默认值。使用 ExecStart 启动的进程是该服务的主要进程。
* forking - 使用 ExecStart 启动的进程生成一个成为服务主进程的子进程,。父进程在启动完成后会退出。
* oneshot – 这个类型与 simple 类似,但在启动相应单位前会退出。
* dbus - 这个类型与 simple 类似,但后续单元仅在主进程获得 D-Bus 名称后启动。
* notify - 此类型与 simple 类似,但只有在通过 sd_notify()函数发送通知消息后,后续单元才启动。
* idle - 与 simple 类似,服务二进制文件的实际执行会延迟,直到所有作业都完成,这避免了将状态输出与服务的 shell 输出混在一起。
ExecStart
指定在启动该单元时要执行的命令或脚本。ExecStartPre 和 ExecStartPost 指定在 ExecStartPtart 之前和之后要执行的自定义命令。Type=oneshot 启用指定可按顺序执行的多个自定义命令。
ExecStop
指定在该单元停止时要执行的命令或脚本。
ExecReload
指定重新载入该单元时要执行的命令或脚本。
Restart
启用此选项后,服务会在进程退出后重新启动,但 systemctl 命令的完全停止除外。
RemainAfterExit
如果设置为 True,即使所有进程都退出了,该服务也被视为活动状态。默认值为 False。这个选项在配置了 Type=oneshot 时特别有用。
4.[Install] 部分
Alias
为这个单元提供空格分开的额外名称列表。除 systemctl enable 以外,多数systemctl 命令可使用别名而不是实际的单元名称。
RequiredBy
依赖于这个单元的单元列表。当启用此单元时,在 RequiredBy 中列出的单元会获得对这个单元的一个 Require 依赖项。
WantedBy
依赖于这个单元的单位列表。当启用这个单元时,在 WantedBy 中列出的单元会得到一个 Want 依赖项。
Also
指定要随这个单元一起安装或卸载的单元列表。
DefaultInstance
仅限于实例化单元,这个选项指定启用单位的默认实例。
关于[Unit] [Service] [Install]部分中可配置的选项的完整列表,请查看 systemd.unit(5) 手册页