【发布时间】:2014-12-08 09:13:05
【问题描述】:
如何编写一个可移植的 init 脚本来使用
- 新贵 (Ubuntu)
- 系统化
- 可选的 init.d
其他平台(Windows、Android、OS-X)在我的上下文中并不重要。
【问题讨论】:
标签: portability init upstart systemd
如何编写一个可移植的 init 脚本来使用
其他平台(Windows、Android、OS-X)在我的上下文中并不重要。
【问题讨论】:
标签: portability init upstart systemd
systemd 和 upstart 都支持 sysinit 样式脚本。 RHEL 6 使用 upstart,但大多数脚本都是普通的 init.d bash 脚本。 RHEL 7 和 Fedora 19(及更早版本)使用 systemd,但它们很乐意运行旧的初始化脚本。
您可以使用带有 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 upstart (also look here) 和 init.d 脚本可能会在 UNIX-es 的其余部分上仍然可用。
【讨论】:
foo 之后启动此服务。 AFAIK 这不受 init.d 脚本的支持。
init.d 脚本必须自己执行此操作(一个脚本可以随时检查、启动和/或停止另一个脚本)。
据我所知systemd 允许运行init.d 脚本,因此您可以使用upstart 和init.d 编写可移植的脚本。
另一件事是它们(systemd、init.d、upstart)都使用自己的语法。我看到的唯一解决方案是创建三个不同的脚本来调用最常见的服务接口的一些应用程序 - 一个分叉服务应用程序。这样所有的经理都会知道如何处理你的服务。并为您的应用程序提供所有三种脚本。然后,安装程序必须选择要与您的服务应用程序一起安装的脚本。
【讨论】: