2008-11-13 62 views
4

我有幾個init.d腳本用於啓動一些守護進程。我在互聯網上找到的大多數這些腳本都使用start-stop-daemon。我的理解是,「start-stop-daemon」是特定於Linux或BSD發行版的命令,並且在Solaris上不可用。如何將Ubuntu/Debian Linux中的init.d腳本轉換爲Solaris?

將我的init.d腳本從Linux轉換爲Solaris的最佳方式是什麼?是否有一個相當於我可以使用的start-stop-daemon的命令?

因爲我對Solaris用戶不是很瞭解,所以我願意承認,我甚至不知道我的問題是否內在地無效。

回答

5

start-stop-daemon是Linux的一個東西,在Solaris上用處不大。我想你可以移植命令,如果你想重新使用你的init腳本。

否則,它取決於您使用的Solaris版本。從Solaris 10和OpenSolaris開始,他們使用新的啓動腳本框架「Solaris Service Management Facility」,您可以使用命令svcssvccfgsvcadm進行配置。

查看http://www.oracle.com/technetwork/server-storage/solaris/overview/servicemgmthowto-jsp-135655.html瞭解更多信息。

對於較早的Solaris發行版,大多數init腳本都是在純shell中編寫的,沒有任何幫助程序命令,如start-stop-daemon。

+0

我正在使用OpenSolaris。感謝您的信息,我會檢查您發佈的鏈接。 – 2008-11-13 09:54:28

4

建議在Solaris 10或更高版本中使用SMF,但在早期版本中,您需要在/etc/init.d中創建一個init腳本,並從rcX.d目錄鏈接到該腳本。下面是一個init腳本用於啓動rsync進程一個最基本的例子:

#!/sbin/sh 

startcmd() { 
    /usr/local/bin/rsync --daemon # REPLACE WITH YOUR COMMANDS 
} 

stopcmd() { 
    pkill -f "/usr/local/bin/rsync --daemon" # REPLACE WITH YOUR COMMANDS 
} 

case "$1" in 
'start') 
     startcmd 
     ;; 
'stop') 
     stopcmd 
     ;; 
'restart') 
     stopcmd 
     sleep 1 
     startcmd 
     ;; 
*) 
     echo "Usage: $0 { start | stop | restart }" 
     exit 1 
     ;; 
esac 

創建一個鏈接到每個rcX.d目錄的腳本(繼「S」 /「K」慣例)。

ln rsync /etc/rc3.d/S91rsync 
for i in `ls -1d /etc/rc*.d | grep -v 3`; do ln rsync $i/K02rsync; done 

請參閱每個rcX.d目錄中的自述文件,並檢查init.d的手冊頁。這是一個有點手冊頁的:

在RC文件名.D目錄的形式爲 [SK] nn,其中S表示啓動這項工作的,K表示 殺死這個作業,nn是用於查殺的相對序列號或開始工作的 。

當進入一個狀態(init S,0,2,3等)時,rc [S0-6]腳本 在/etc/rc[S0-6].d中執行前綴爲K 後跟那些以S開頭的腳本。在/ etc/rc [S0-6]目錄之一中執行每個 腳本時,/ sbin/rc [S0-6] 腳本會傳遞一個參數。對於前綴爲K的腳本,參數'stop' 傳遞參數'start',前綴爲S的腳本 的參數'start'。將相同序列 編號應用於多個腳本沒有任何壞處。