Ubuntu

init.d 腳本未在啟動時執行

  • August 10, 2016

我的腳本沒有在 Ubuntu 下的 vagrant box 中啟動時執行。

我的腳本看起來像這樣 -

#!/bin/bash
# /etc/init.d/mailcatcher
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
mailcatcher --http-ip 192.168.50.10

我對文件的權限如下所示 -

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh

我執行命令 -

sudo update-rc.d "mailcatcher.sh" defaults

如果我手動執行腳本,它會工作並啟動 mailcatcher。如果我重新啟動電腦,mailcatcher 守護程序不會啟動。我錯過了什麼嗎?

現在是 Ubuntu 的答案。

這是一個 Ubuntu Linux 問題,版本 15 現已發布。Ubuntu 世界現在有了 systemd。但即使在版本 15 之前,Ubuntu 世界就已經是新貴了。真的沒有理由編寫 System 5rc腳本。從那裡開始肯定沒有充分的理由。

upstart 和 systemd 都做所有的“服務控制”。您需要做的就是描述服務

系統

一個 systemd 服務單元,要放置在 中 /etc/systemd/system/mailcatcher.service,是

[單元]
描述=Ruby MailCatcher
文件=http://mailcatcher.me/

[服務]
# Ubuntu/Debian 約定:
EnvironmentFile=-/etc/default/mailcatcher
類型=簡單
ExecStart=/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

[安裝]
WantedBy=多使用者.target

這會自動獲取所有 systemd 控制項之一,例如:

  • systemctl enable mailcatcher.service將服務設置為在啟動時自動啟動。
  • systemctl preset mailcatcher.service如果本地策略允許,將服務設置為在啟動時自動啟動。
  • systemctl start mailcatcher.service手動啟動服務。
  • systemctl status mailcatcher.service查看服務狀態。

暴發戶

Upstart 類似,將 Fideloper LLC 的 upstart 作業文件修改為此問題給出了以下結果/etc/init/mailcatcher.conf

描述“郵遞員”

從執行級別開始 [2345]
在執行級別停止 [!2345]

重生

執行 /usr/bin/mailcatcher --foreground --http-ip=192.168.50.10

這會自動獲取所有暴發戶控制項之一,例如:

  • initctl start mailcatcher手動啟動服務。
  • initctl status mailcatcher查看服務狀態。

額外的 daemontools 部分

為了好玩,為了娛樂任何通過 WWW 搜尋到達的使用 daemontools-family 的人,並且為了證明不從 System 5 腳本開始的另一個原因,我通過nosh 工具集的命令rc執行該 systemd 服務單元以生成以下 daemontools-family 執行腳本: convert-systemd-units

#!/bin/nosh
#執行從./mailcatcher.service生成的文件
#Ruby MailCatcher
目錄 /
讀取配置 --oknofile /etc/default/mailcatcher
/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

實際上,該convert-systemd-units命令會生成一個完整的 nosh服務包目錄。使用指定依賴關係和排序資訊的目錄,安裝/var/sv/mailcatcher在帶有 nosh 的系統中,service-manager獲取所有 nosh 控制項,例如:

  • system-control enable mailcatcher.service將服務設置為在啟動時自動啟動。
  • system-control start mailcatcher.service手動啟動服務。
  • system-control status mailcatcher.service查看服務狀態。
  • system-control preset mailcatcher.service如果本地配置(systemd 樣式預設或/etc/rc.conf{,.local})允許,將服務設置為在啟動時自動啟動。

甚至不要System 5rc文件開始。

查看SaltStack 用於 System 5腳本的這個模板。rc即使消除了 SaltStack 參數化,也有 59 行 shell 腳本程式碼,其中大部分是您必須重新發明和重新編寫的通用樣板。再次。Celada 已經指出你在哪裡重新發明了它。

systemd 單元文件有 11 行長。新貴作業文件為 8 行。noshrun腳本是 6。它們為您完成所有啟動/停止/狀態機制。不要從 System V 開始rc,尤其是在 Ubuntu Linux 上。

進一步閱讀

引用自:https://unix.stackexchange.com/questions/199679