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

我想遵循每个平台上用于启动脚本的习惯用法,并且这意味着在Ubuntu上运行Upstart,在Fedora上运行systemd。
是否有编写Systemd系统文件的良好教程?
是否有需要注意的“最佳实践”? br />
我发现了以下资源:


关于systemd的Fedora Wiki页面
关于编写systemd系统文件的博客
Wikidia上的Systemd
>
我主要是在寻找各种API作为参考,以及要遵循的基本格式。

评论

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

> man systemd.service>> man systemd.unit

#1 楼

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

还有freedesktop Systemd常见问题解答。

评论


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

–beatgammit
2011年6月21日15:54

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

– Jasonwryan
2011年6月21日在18:28

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

–beatgammit
2011年6月22日4:47

谁有时间在那里开始。我的意思是,如果您知道自己在做什么,那将是一个很好的参考,但是神圣的手册页面很复杂。

–乔纳森·科玛(Jonathan Komar)
2015年4月6日在16:51



@ macmadness86 OP在寻找权威来源(请参阅最后一段);对于大多数需求,阅读类似应用程序的服务文件,然后查阅手册页的特定部分将绰绰有余。它们实际上非常简单。

– Jasonwryan
15年4月6日在18:50

#2 楼

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

评论


systemctl具有cat命令快捷方式,以供参考。

–安迪·贝蒂斯沃思(Andy Bettisworth)
16年1月11日,0:04

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

– JpaytonWPD
16年2月1日在13:23

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

– knocte
16/12/22在8:49

@knocte的权限是没有意义的,因为它将是一个特权进程,它将读取它,而只是不写入而将其读取。该文件的位置是特权位置(/ usr / lib / systemd / ...),您可能需要一些特殊权限才能在此处添加文件。

–死灵法师
17年1月14日在21:45

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

– wbkang
17年5月29日在0:09

#3 楼

Redhat文档是一个很好的资源。


在RHEL7上创建和修改系统化的单位文件
使用SYSTEMD管理服务| systemd简介


评论


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

–斯蒂芬·劳赫(Stephen Rauch)
17年2月24日在19:20

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

– ac骨
17年2月24日在19:26

DigitalOcean还提供了一套非常全面的教程和相关文档:digitalocean.com/community/tutorials/…

– Irbanana
18-10-31在14:09