如何在 Linux 中创建 systemd 服务文件


参考: 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

红帽系统培训: https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/index

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) 手册页

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值