便携式Init脚本?

时间:2014-12-08 09:13:05

标签: portability init upstart systemd

如何编写与

一起使用的可移植init脚本
  • upstart(Ubuntu)
  • systemd
  • 可选的init.d

其他平台(Windows,Android,OS-X)在我的上下文中并不重要。

2 个答案:

答案 0 :(得分:2)

systemdupstart都支持sysinit样式脚本。 RHEL 6使用upstart,但大多数脚本都是普通的init.d bash脚本。 RHEL 7和Fedora 19(及更早版本)使用systemd,但他们很乐意运行旧的init脚本。

您可以使用使用init脚本分叉的普通旧式守护程序。如果应用程序不自行分叉,您可以使用supervisord之类的东西为您执行分叉,并直接与单独的systemd脚本集成。我不知道upstart的细节,除了它使用它自己的格式,但支持它(如果你不必支持旧的/当前的Linux系统)似乎只适用于非Linux发行版。 systemd目前是特定于Linux的,但我已经看到正在完成将其移植到BSD的工作。

您可能对他们如何整合CUPS感兴趣。上次我检查systemd“脚本”时使用-f选项(前景) - ExecStart=/usr/sbin/cupsd -f启动守护程序。 init.d脚本不会添加该标志。

简而言之 - 现在使用旧式System V init.d脚本,如果您想要一个适用于所有地方的解决方案。如果您有一些备用资源,请添加systemd支持,如果您有足够的资源,您当然可以单独支持这三个系统(对用户来说是最大的好处,但需要做很多工作)。

我个人创建init.d + systemd脚本,不关心暴发户。有可能systemd will soon replace upstartalso look here)和init.d脚本仍然可用于其他UNIX-es。

答案 1 :(得分:1)

据我所知systemd允许运行init.d个脚本,因此您可以使用upstartinit.d执行可移植的脚本。
另一件事是所有这些(systemdinit.dupstart)都使用自己的语法。我看到的唯一解决方案是创建三个不同的脚本,调用最常见服务接口的一些应用程序 - 分叉服务应用程序。这样,所有经理都会知道如何处理您的服务。并为您的应用程序提供所有三种脚本。然后,安装程序必须选择要与服务应用程序一起安装的脚本。