我有一個啟動 Apache 的命令,/etc/rc3.d
該命令在伺服器重新啟動時不會執行。該腳本名為S75Apache2
.有人推測這是因為該連結的名稱中有一個大寫的“A”,如果重命名為S75apache2
.
有人能證實嗎?我搜尋過文檔但找不到答案。如果不再次重新啟動伺服器(我不想這樣做),我就無法真正測試這一點。
答案1
Solaris 初始化腳本很麻煩。大寫字母 A 並不重要,其中有一個腳本/etc/rc.d
可以查找以“S”開頭的每個檔案/etc/rc3.d
並按數字順序運行它們。
這讓你從基礎開始:
/etc/rc3.d/S75Apache2
set 可執行嗎?該腳本是否有“#!”線?該行是否正確(沒有非列印位元組等)?
如果它是 bash 或 ksh 腳本,請將其作為
ksh -n /etc/rc3.d/S75Apache2 start
.這會告訴你它是否有語法錯誤。如果您可以以 root 身分執行該腳本,請嘗試一下:
/etc/rc3.d/S75Apache2 start
並/etc/rc3.d/S75Apache2 stop
仔細檢查它是否啟動httpd
和停止httpd
。至少自己運行帶有“start”和“stop”參數的腳本。用於set -x
查看腳本在運行時執行的操作。檢查一下它的作用是否與您認為的相符。仔細讀
/etc/rc3.d/S75Apache2
。PATH
在啟動時填充稀疏,您的腳本可能不知道某些可執行檔在啟動時位於何處,但可能在啟動後執行時知道。盡量不要假設太多 - 您認為存在的文件可能不存在,諸如此類。確保
KnnApache2
中不存在腳本/etc/rc3.d
。我相信 Solaris從運行等級 3 轉換到運行等級 5 時init
將會運行(例如) 。K76Apache2 stop
確保腳本正確更改使用者 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”,您就會找到很多食譜。