把可執行程式做成一個服務
在linux系統啟動的時候,我們可以看到很多服務性程式一個接一個的被啟動(就是那些後面有一個蘭色[OK]的行),這些在後台啟動並執行程式為我們使用電腦起了很重要的作用,以這種方式啟動並執行程式有以下特點:
開機啟動,關機停止(廢話。關機了還運行啊。。。)
後台運行
通過service 命令控制或查看對應的程式的運行狀態
恩,不錯,那怎麼把我們自己編製的程式做成這樣的一個服務呢。
廢話少說,主要分以下3步:
1、把可執行程式放到一個linux系統可以找到的地方。
在linux命令提示字元下輸入 env ,斷行符號後可看到環境變數,裡面有一項PATH的,對,這項裡所指定的目錄都是系統可找到的地方,把我們的可執行程式放入其中的一個目錄下即可,我們一般放在/usr/sbin/目錄下(放什麼有放什麼的地方,最好不要亂放)。
2、在目錄 /etc/init.d/ 下,建立一個以服務名為檔案名稱的檔案。
如果我們開啟目錄 /etc/init.d/,看到的檔案其實都是服務程式檔案,每個檔案的內容都大同小異,我們會看到,這裡的檔案在檔案結構上幾乎是一樣的。幾乎每個檔案都有 start、stop、restart和status這樣的標誌,對,我們建立的這個檔案也具有相同的結構,只是在這些標誌內部把相應的可執行程式換成我們自己的可執行程式即可,知道怎麼做了嗎。那就是:複製——修改——儲存。
3、在目錄 /etc/rc3.d/ 下,建立一個指向在第2步中建立的服務檔案的符號串連檔案。
開啟目錄 /etc/rc3.d/ ,我們將看到這裡都是符號串連檔案(linux系統中的符號串連相當於windows中的捷徑)。採用以下命令格式:
ln -sf 目標檔案名 串連檔案名稱
串連檔案名稱益採用“SXX目標檔案名”的格式,其中XX一般是一個從1到100的整數,它表示啟動優先順序,數字越大,優先順序越低,比如:服務A的運行要依賴服務B,那A的XX數字就應該大於B的。後跟“目標檔案名”是為了一目瞭然,一看就知道是哪個檔案的符號串連。
目錄 /etc/rc3.d/ 是系統啟動時自動搜尋的目錄,該目錄下的符號串連檔案的目標檔案,都將被運行,這就是在這個目錄建立符號串連的原因——為了開機就運行。
好了,完成以上3個步驟,你就把自己的一個可執行程式做成系統的一個服務了,它具有我們一開始說的幾個特定。我們可以用service命令控制這個程式了:
啟動:service hdz_service start
停止:service hdz_service stop
重啟:service hdz_service restart
上面的 hdz_service 為服務名,也就是在第2步中建立的檔案名稱。
不過,好象感覺比較麻煩,能否把這幾個步驟自動化一下。這樣在一台新機子上部署就方便了,也更象回事 -_^。辦法當然有了,還記得我們那個記錄代碼檔案之間依賴關係的makefile檔案嗎。呵呵,我們在這裡要用到它了。
在makefile檔案中添加一個標誌,並在該標誌下添加和下面類似的代碼:
install:
cp ./hdz_pro /usr/sbin/
cp ./hdz_service /etc/init.d/
cd /etc/init.d/
chmod +x hdz_service
cd /etc/rc3.d/
ln -sf ../init.d/hdz_service ./S99hdz_service
在標誌install下的沒一句話,前面一定要留空白,這不僅是有利於閱讀,更是一個要求,makefile檔案要求每一句可執行語句前都要有空白(空格或tab)。
上面代碼中的 hdz_pro 和 hdz_service 分別是可執行檔名和服務名,這兩個名稱換成你自己的就行了,操作時用以下命令:
make install
運行完就一切OK了,簡單吧。
大家在看我寫的東東時,時不時會碰到“hdz”這樣的東西,這是我名字的縮寫,說明這正是要替換的。