Shell腳本命名引發的問題

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











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章