http://blog.csdn.net/menghuanbeike/article/details/52573668
一、守護進程的定義
在linux或者unix操作系統中,守護進程(Daemon)是一種運行在后台的特殊進程,它獨立於控制終端並且周期性的執行某種任務或等待處理某些發生的事件。
二、守護進程的用途
在日常使用當中,有些linux程序進程是必須長期存在,如果進程由於出錯或者某種原因終止了,應該要能自我恢復。譬如說一些公司的網站后台程序,必須24小時要保證正常運轉,雖然一般都有專人負責服務器的維護,但維護人員總有離開服務器的時候。這時就需要守護進程了,只要能夠監控到服務器程序崩潰了,守護程序就能及時地重啟服務程序。
三、守護進程的編程
一般編寫守護進程要用到linux下面的C編程,操作起來稍微復雜,不適用於維護人員。我在這里只說bash的編寫方式。
bash版的守護進程和實際意義的守護進程是有點不一樣的,屬於偽守護進程,但一樣能達到守護進程的作用:能獨立於控制終端並且周期性的執行某種任務或等待處理某些發生的事件。
打開終端輸入:
vim bash-deamon.sh
- 1
在里面輸入下面的代碼
#!/bin/sh while true; do count=$(ps -ef | grep -c server) #查找當前的進程中,計算server程序的數量 if [ $count -lt 3 ]; then #判斷服務器進程的數量是否小於3(根據實際填上你的服務器進程數量) server start #這里填入需要重啟的服務器進程 fi sleep 2 #睡眠2s,周期性地檢測服務器程序是不是崩潰了 done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
把上面的代碼保存,運行的時候在后面加上“&”符號,目的是讓這個腳本脫離終端運行:
bash bash-deamon.sh &
- 1
以后假如服務器程序崩潰了,守護進程就會幫你重啟服務器程序,非常方便。
四、小結
bash版的守護進程的實現方式非常簡單,只需幾行腳本即可,簡單快捷地自動重啟服務器。
我本人比較少用bash編程,剛開始寫的時候有點摸不着頭腦,不知道如何獲取變量的值(ps -ef | grep -c server),后來才知道需要加入”$”符號才能獲取命令的返回結果。還有比較數字大小的時候,以為要用“><=”這些符號表示,結果一直都不對,后來才知道需要用正則表達式。
-eq 等於,如:if [ "$a" -eq "$b" ] -ne 不等於,如:if [ "$a" -ne "$b" ] -gt 大於,如:if [ "$a" -gt "$b" ] -ge 大於等於,如:if [ "$a" -ge "$b" ] -lt 小於,如:if [ "$a" -lt "$b" ] -le 小於等於,如:if [ "$a" -le "$b" ] < 小於(需要雙括號),如:(("$a" < "$b")) <= 小於等於(需要雙括號),如:(("$a" <= "$b")) > 大於(需要雙括號),如:(("$a" > "$b")) >= 大於等於(需要雙括號),如:(("$a" >= "$b"))
參考資料:
1. bash shell while語法 。
2. linux 程序定時重啟腳本。
3.linux shell中 if else以及大於、小於、等於邏輯表達式介紹 。
4.守護進程–百度百科
5.守護進程的創建方法和步驟。
6. BASH命令之樂(3)之grep 。
7.bash shell腳本執行的幾種方法。