回答
據我所知systemd
允許運行init.d
腳本,所以你可以做一個腳本,是便攜與upstart
和init.d
。
另一件事是他們所有人(systemd
,init.d
,upstart
)使用它自己的語法。我看到的唯一解決方案是創建三個不同的腳本,這些腳本調用最常見的服務接口的一些應用程序 - 分叉服務應用程序。這樣所有的經理都會知道如何處理你的服務。併爲您的應用程序提供所有三種腳本。然後,安裝程序將不得不選擇與您的服務應用程序一起安裝哪個腳本。
systemd和upstart
都支持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 -f
。 init.d
腳本不會添加該標誌。
總之 - 現在使用舊式System V
init.d
腳本,如果你想要一個解決方案,無處不在。如果您有足夠的備用資源,並且如果您有足夠的資源,則可以添加systemd
支持,您當然可以單獨支持這三個系統(對用戶有最大的好處,但是需要大量的工作)。
我會親自創建init.d
+ systemd腳本,並不會在乎新貴。機會是systemd
will soon replace upstart(also look here)和init.d
腳本將在剩餘的UNIX-es上保持可用狀態。
- 1. EF6重新腳手架初始移植
- 2. Android移植初始化問題
- 3. 在從Perl移植的Python腳本中初始化dictonary值時遇到困難
- 4. 如何使bash腳本可移植?
- 5. 定製jquery初始化腳本優化
- 6. 移植到Linux的錯誤:之前預期初始化「:」令牌
- 7. 可移植類庫和resx本地化
- 8. 帶對象的初始化程序列表是不可移植的?
- 9. shell腳本中的初始化程序
- 10. Expect腳本中的數組初始化
- 11. 清理腳本初始化。字典
- 12. chkconfig不添加redis初始化腳本
- 13. Matlab - 每兩秒鐘初始化腳本
- 14. 以gce運行雲初始化腳本
- 15. Gradle - 覆蓋初始化腳本
- 16. CentOS初始化腳本依賴
- 17. 安裝Ruby腳本 - 初始化錯誤
- 18. Google容器引擎初始化腳本
- 19. Ansible初始化腳本期望
- 20. 爲Suricata創建Bash初始化腳本
- 21. 嘗試通過ruby腳本移植到rails應用程序,獲得未初始化的常量錯誤
- 22. 可移植類庫版本
- 23. 移植的Node.js腳本到Python
- 24. 成本初始化
- 25. 使用實體框架遷移的腳本初始遷移
- 26. 我可以禁用HSQLDB初始化腳本創建嗎?
- 27. 在哪裏我可以把腳本啓動在初始化centos?
- 28. 無法打開啓動腳本類緩存初始化腳本
- 29. Sitecore powershell腳本 - 如何初始化自定義腳本
- 30. Ruby MongoClient:從irb初始化成功,從腳本初始化失敗
AFAIK systemd和upstart支持依賴項:您可以說服務'foo'後啓動此服務。 AFAIK這不被init.d腳本支持。 – guettli 2014-12-18 08:59:59
是的,'init.d'腳本必須自己強制執行(一個腳本可以隨時檢查,啓動和/或停止另一個腳本)。 – 2014-12-18 16:49:29