it-swarm.cn

编写基本的系统服务文件

我正在开发一个Nodejs应用程序,用户可以通过localhost上的HTTP与之交互。几乎没有参数,并且守护程序实际上没有依赖性,只需要在登录时启动即可。

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

  • 有写好的systemd系统文件的好教程吗?
  • 有没有要注意的``最佳实践''?

我发现了以下资源:

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

106
beatgammit

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

还有 freedesktop Systemd常见问题解答

26
jasonwryan

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

步骤1:我创建了这个文件(注解位置),该文件实际上触发了带有扩展参数的bash进程。您可以触发自己的命令,该命令可能与bash不同。

[[email protected] ~]# 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

184
necromancer
4
caracal