2014-12-08 67 views
3

如何寫一個便攜式的init腳本與可移植的初始化腳本?

  • 新貴(Ubuntu的)
  • systemd
  • 可選的init.d
  • 工作

其他平臺(Windows,安卓,OS-X)在我的情況下並不重要。

回答

1

據我所知systemd允許運行init.d腳本,所以你可以做一個腳本,是便攜與upstartinit.d
另一件事是他們所有人(systemd,init.d,upstart)使用它自己的語法。我看到的唯一解決方案是創建三個不同的腳本,這些腳本調用最常見的服務接口的一些應用程序 - 分叉服務應用程序。這樣所有的經理都會知道如何處理你的服務。併爲您的應用程序提供所有三種腳本。然後,安裝程序將不得不選擇與您的服務應用程序一起安裝哪個腳本。

2

systemdupstart都支持sysinit樣式腳本。 RHEL 6使用新貴,但大多數腳本都是正常的init.d bash腳本。 RHEL 7和Fedora 19(及更早版本)使用systemd,但他們愉快地運行舊的init腳本。

您可以使用正常的舊式守護程序與初始化腳本分叉。如果應用程序不能自行分叉,則可以使用supervisord之類的代碼爲您分叉並直接與單獨的systemd腳本集成。我不知道有關upstart的詳細信息,只是它使用它自己的格式,但支持它(如果您不需要支持舊的/當前的Linux系統)似乎只適用於非Linux發行版。 systemd目前是Linux專用的,儘管我已經看到了將它移植到BSD的工作。

您可能會對如何整合CUPS感興趣。上次我檢查了systemd「腳本」以-f選項(前景)啓動守護程序 - ExecStart=/usr/sbin/cupsd -finit.d腳本不會添加該標誌。

總之 - 現在使用舊式System Vinit.d腳本,如果你想要一個解決方案,無處不在。如果您有足夠的備用資源,並且如果您有足夠的資源,則可以添加systemd支持,您當然可以單獨支持這三個系統(對用戶有最大的好處,但是需要大量的工作)。

我會親自創建init.d + systemd腳本,並不會在乎新貴。機會是systemdwill soon replace upstartalso look here)和init.d腳本將在剩餘的UNIX-es上保持可用狀態。

+0

AFAIK systemd和upstart支持依賴項:您可以說服務'foo'後啓動此服務。 AFAIK這不被init.d腳本支持。 – guettli 2014-12-18 08:59:59

+0

是的,'init.d'腳本必須自己強制執行(一個腳本可以隨時檢查,啓動和/或停止另一個腳本)。 – 2014-12-18 16:49:29