我正在开发一个 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 手册页。它们代表系统和服务的综合资源。
答案3
Redhat 文档是一个很好的来源。
答案4
这Arch 维基百科关于编写 systemd 单元的页面非常全面且易于理解。