1、問題描述:
要怎麼樣監視Linux下的一些進程是否在運行,對於一些必要啓動的進程,如果監視到該進程掛了,沒有在運行,要自動啓動該進程,並報警。這裏以sshd進程爲例進行一些實驗:
2、實驗結果:
a、首先查看一下sshd進程的狀況:
b、編寫腳本(sshd_test.sh)實現判斷功能:首先通過ps命令(要去除grep命令本身的影響)看看sshd進程存不存在,如果不存在,則啓動sshd進程:
c、運行結果:
sshd進程在運行中,執行結果正確
stop掉sshd進程,發現執行結果依舊是sshd在運行中,這是怎麼回事?腳本出現了錯誤?還是說sshd進程沒有被stop掉?很明顯,sshd進程並沒有在運行中,腳本看起來好像也沒什麼錯誤,那爲什麼還會出現這樣的結果呢?細看了一下發現,腳本名字是sshd_test.sh,所以出現這個問題的原因是,該腳本運行時會產生一個sshd_tesh的進程,進而影響了腳本的判斷。
爲了驗證上述問題:寫了一個腳本去驗證:在腳本中判斷執行執行的時候,進程中會產生一個與腳本名一樣的進程
可以通過改腳本名字或者是在腳本判斷中,去除腳本名字的影響,又或者是通過端口去判斷sshd進程有沒有在運行;
去除腳本名字的影響
用端口來判斷:
所以,以後在寫類似的腳本文件時,注意命名!!!
d、讓腳本隔一分鐘自動執行一次:crontab -e