编写基本的 systemd 服务文件

编写基本的 systemd 服务文件

我正在开发一个 Nodejs 应用程序,用户通过 localhost 上的 HTTP 进行交互。实际上没有任何参数,守护进程几乎没有依赖项,只需在登录时启动即可。

我想遵循每个平台上启动脚本的习惯用法,这意味着 Ubuntu 上的 Upstart 和 Fedora 上的 systemd。

  • 有没有好的教程可以编写systemd系统文件?
  • 是否有任何需要注意的“最佳实践”?

我找到了这些资源:

我主要是在寻找某种 API 作为参考,以及可遵循的基本格式。

答案1

以下示例受此链接启发,该链接实际上并未提及所有步骤,列出只是为了注明来源:http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

步骤1:我创建了这个文件(注意位置),它本质上是使用扩展参数触发 bash 进程。您可以触发自己的命令,该命令可能与 bash 不同。

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

第2步:

重新加载systemd

systemctl daemon-reload

启动新服务:

systemctl enable foo

(同样可以disable

(可选)步骤 3:它应该在下次重新启动进入多用户模式(运行级别 3)时自动启动,但如果您想立即启动它:

systemctl start foo
systemctl status foo # optional, just to verify

更新:为了完整起见,我应该补充一点,ubuntu bionic 似乎有一个非常详尽的手册页。RTFM 在这里

答案2

我将从Systemd 手册页。它们代表系统和服务的综合资源。

还有freedesktop Systemd 常见问题解答

答案3

答案4

Arch 维基百科关于编写 systemd 单元的页面非常全面且易于理解。

相关内容