Opensolaris

在 OpenSolaris 上啟動服務之前執行腳本

  • October 14, 2009

我有一個在 OpenSolaris 上執行的媒體伺服器,它使用 Coherence 將媒體提供給網路。有時我在啟動時遇到問題,因為 Coherence 服務無法啟動,因為鎖定文件仍然存在(未正確清理)。

我想知道在 Coherence 服務嘗試啟動之前在啟動時刪除此文件的最佳/最簡潔/最官方的方法是什麼。

我想過編寫一個快速腳本並將其放入 /etc/rc3.d/ 中,但我讀到 OpenSolaris 不一定從該位置執行腳本。

僅供未來人參考。

我通過修改 coherence.sh 腳本(svcadm 使用它來啟動/停止伺服器)來解決我的問題,添加程式碼來檢測伺服器是否正在執行,如果沒有,則刪除那裡的日誌文件。

插入的程式碼:

check() {
       if [ -f ${LOCKFILE} ]; then
           pgrep -f /usr/bin/$PROGNAME &> /dev/null
           RETVAL=$?
           [ ${RETVAL} -ne 0 ] && rm -rf ${LOCKFILE}
           echo ${RETVAL}
       fi
       return 0
}

然後我從 start() 函式的開頭和在 stop() 函式中返回之前呼叫了這個函式。

這將檢查執行檔是否正在執行,如果沒有,則刪除日誌文件。似乎工作正常,我沒有任何問題。

Solaris 使用 SMF 來管理服務,但仍然支持 rc 結構。Coherence 在您的系統上以哪種方式啟動?我會說您需要為您的鎖定刪除腳本使用相同的方法。

有關 Solaris 服務管理工具 (SMF) 的文件,請參閱

從該頁面:

請注意,svcadm 應該只用於 SMF 服務——舊的 rc 腳本控制服務的工作方式與過去版本中的相同。

和:

由傳統 rc 腳本啟動的服務(稱為遺留服務)通常會像往常一樣繼續工作。它們將顯示在 svcs(1) 的輸出中,並帶有基於其 rc 腳本路徑名的 FMRI,但它們無法由 svcadm(1M) 控制。應該通過直接執行 rc 腳本來停止和啟動它們。

如“顯著變化”部分所述,rc 腳本在引導時可能不會像在早期版本的 Solaris 中那樣在完全相同的時間點執行。特別是,依賴於在某些 Solaris 提供的 rc 腳本之前執行的腳本可能會遇到問題。不過,絕大多數腳本應該可以繼續工作而不會遇到任何問題。

Coherence (Open)Solaris 安裝指南

引用自:https://serverfault.com/questions/67324