在 Solaris 上重新啟動後啟動腳本不執行

在 Solaris 上重新啟動後啟動腳本不執行

我有一個啟動 Apache 的命令,/etc/rc3.d該命令在伺服器重新啟動時不會執行。該腳本名為S75Apache2.有人推測這是因為該連結的名稱中有一個大寫的“A”,如果重命名為S75apache2.

有人能證實嗎?我搜尋過文檔但找不到答案。如果不再次重新啟動伺服器(我不想這樣做),我就無法真正測試這一點。

答案1

Solaris 初始化腳本很麻煩。大寫字母 A 並不重要,其中有一個腳本/etc/rc.d可以查找以“S”開頭的每個檔案/etc/rc3.d並按數字順序運行它們。

這讓你從基礎開始:

  1. /etc/rc3.d/S75Apache2set 可執行嗎?

  2. 該腳本是否有“#!”線?該行是否正確(沒有非列印位元組等)?

  3. 如果它是 bash 或 ksh 腳本,請將其作為ksh -n /etc/rc3.d/S75Apache2 start.這會告訴你它是否有語法錯誤。

  4. 如果您可以以 root 身分執行該腳本,請嘗試一下:/etc/rc3.d/S75Apache2 start/etc/rc3.d/S75Apache2 stop 仔細檢查它是否啟動httpd和停止httpd。至少自己運行帶有“start”和“stop”參數的腳本。用於set -x查看腳本在運行時執行的操作。檢查一下它的作用是否與您認為的相符。

  5. 仔細讀/etc/rc3.d/S75Apache2PATH在啟動時填充稀疏,您的腳本可能不知道某些可執行檔在啟動時位於何處,但可能在啟動後執行時知道。盡量不要假設太多 - 您認為存在的文件可能不存在,諸如此類。

  6. 確保KnnApache2中不存在腳本/etc/rc3.d。我相信 Solaris從運行等級 3 轉換到運行等級 5 時init將會運行(例如) 。K76Apache2 stop

  7. 確保腳本正確更改使用者 ID。這對 Apache 來說可能並不重要,因為您的腳本可能只是呼叫apachectl start一些序言命令,但如果您http直接執行,請確保產生的httpd進程具有正確的使用者 ID。使用sudo腳本中的 或 某些內容來使其正確。

答案2

事實證明啟動腳本中有一個錯誤:LD_LIBRARY_PATH 變數設定不正確。在腳本中定義它可以解決問題。

為了將來參考,有一個日誌檔案包含啟動訊息,其中包含導致解決我們的問題的錯誤。該文件是:

/var/svc/log/milestone-multi-user-server:default.log

我在 /etc/rc3.d/README 文件中找到了對此的引用。又一天,又一個知識點!

答案3

您是否已經推出了自己的 Apache(即從原始碼編譯),或者您只是使用 Solaris 10 預先安裝的 Apache?

好吧,如果您像您所說的那樣使用 Solaris 10(或更高版本),那並不重要您根本不應該使用 Solaris 初始化腳本,您應該使用 SMF。 (是的,從技術上講,初始化腳本仍然受支持,但正如您所指出的,它們很麻煩,而且 SMF 更好)

要啟動(現在以及重新啟動後自動)隨 Solaris 10 一起預先安裝的 Apache 2.2 Web 伺服器,只需執行以下操作:

svcadm 啟用 /network/http:apache2

如果您已經推出了自己的 Apache,那麼您需要建立一個 SMF 清單,匯入該清單,然後您就可以開始了。只需谷歌搜尋“SMF Solaris”,您就會找到很多食譜。

相關內容