编写基本的系统服务文件


103

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

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

  • 有什么好的教程来编写systemd系统文件吗?
  • 有什么“最佳实践”需要注意吗?

我发现了以下资源:

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


关于systemdArch Linux Wiki页面上有一个有趣的部分,关于编写服务文件。
Rudy Matela

> man systemd.service>> man systemd.unit
truezion 2014年

Answers:


29

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

还有freedesktop Systemd常见问题解答


43
手册页将很有用(尽管我希望它更干净),但是是否有基本的系统文件教程?像哪些部分是必需的,哪些部分是推荐的,哪些部分是可选的。手册页似乎假设我已经是systemd系统文件的专家,而我不是。
beatgammit 2011年

不幸的是,我并没有意识到。可能有一个假设,就是如果您要编写初始化脚本,那么您已经知道如何编写初始化脚本。查看Arch脚本,然后选择与您所需的脚本类似的文件:archlinux.org/packages/community/i686/systemd
jasonwryan 2011年

1
谢谢!在您的帮助和我发现的博客的帮助下,我得以基本工作。Systemd似乎比新贵或旧的systemv init守护程序好得多。
beatgammit 2011年

49
谁有时间在那里开始。我的意思是,如果您知道自己在做什么,那将是一个很好的参考,但是圣牛手册手册很复杂。
乔纳森·科玛

1
@ macmadness86 OP正在寻找权威来源(请参阅最后一段);对于大多数需求,阅读类似应用程序的服务文件,然后咨询man页面的特定部分,将足以帮助您到达那里。它们实际上非常简单。
jasonwryan

180

以下示例受此链接的启发,该链接实际上并未提及所有步骤,而列出该链接只是为了说明来源: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

第二步

重新加载systemd

systemctl daemon-reload

启动新服务:

systemctl enable foo

(同样可以disable

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

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

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


57
感谢您发布快速教程,而不仅仅是链接到异地手册页!
Toby J

2
systemctl具有cat命令快捷方式,以供参考。
安迪·贝蒂斯沃思

cat命令的快捷方式是什么?喜欢一种无需输入整个路径即可创建和编辑systemd控制文件的方法吗?
JpaytonWPD '16

理想情况下,此文件应具有哪些权限?
knocte '16

2
根据systemd.unit手册页,应将其放在中/etc/systemd/system。/ usr / lib / systemd是适当的分发程序包放置其文件的位置。
wbkang

4

2
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
斯蒂芬·劳奇

1
@StephenRauch我知道纯链接不是很受欢迎,但这是一个很大的话题,要在一个答案中进行总结并不容易。
caracal

这是我发现的最易读的指南。这是一个很好的答案。:-)
好好对待您的mods

DigitalOcean还提供了一套非常全面的教程和相关文档:digitalocean.com/community/tutorials/…–
irbanana
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.