如何编写可移植的初始化脚本
- 新贵(Ubuntu)
- 系统
- 可选的 init.d
其他平台(Windows、Android、OS-X)在我的上下文中并不重要。
如何编写可移植的初始化脚本
其他平台(Windows、Android、OS-X)在我的上下文中并不重要。
systemd和upstart
支持样式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
就会取代新贵(也看这里),init.d
脚本将在其余的 UNIX-es 上保持可用。
据我所知systemd
,允许运行init.d
脚本,因此您可以使用upstart
and编写可移植的脚本init.d
。
另一件事是所有这些 ( systemd
, init.d
, upstart
) 都使用自己的语法。我看到的唯一解决方案是创建三个不同的脚本来调用最常见的服务接口的一些应用程序 - 一个分叉服务应用程序。这样所有的经理都会知道如何处理你的服务。并为您的应用程序提供所有三种脚本。然后,安装程序必须选择要与您的服务应用程序一起安装的脚本。