2016-12-07 86 views
1

與跟隨着的代碼檢查如果一個進程正在運行,如果沒有,使用cron

#!/bin/bash 
ps -aux | grep sidekiq > /dev/null 
if [ $? -eq 0 ]; then 
    echo "Process is running." 
else 
    echo "Process is not running." 
fi 

要檢查是否sidekiq進程正在運行或不,我創建restart.sh重新啓動它。我會把這個腳本放在cron中,每天運行,所以如果sidekiq沒有運行,它會自動啓動。

我的問題是,與

ps -aux | grep sidekiq 

即使進程沒有運行,它顯示

myname 27906 0.0 0.0 10432 668 pts/0 S+ 22:48 0:00 grep --color=auto sidekiq 

,而不是什麼都沒有。即使進程沒有運行,它也會以grep計數,因此它顯示爲「sidekiq」進程正在運行。如何不計算這個結果?我相信我必須使用awk,但我不確定如何在此處使用它以獲得更好的過濾效果。

回答

3

ps輸出中排除grep結果。不要

ps -aux | grep -v grep | grep sidekiq 

(或)做一個regEx搜索的進程名,即s隨後進程名的其餘部分。

ps -aux | grep [s]idekiq 

爲了避免這樣的衝突在搜索使用過程greppgrep直接與進程名

pgrep sidekiq 

使用pgrep會像下面的一個有效方法。

if pgrep sidekiq >/dev/null 
then 
    echo "Process is running." 
else 
    echo "Process is not running." 
fi 
+1

嗯。很好的觸摸:)我猜測該操作已經找出了問題的根源,就是'ps -aux |'這一行grep sidekiq>/dev/null'在他的腳本..特別我喜歡第二個解決方案,這是臨牀。 – sjsam

+0

@inian - grep -v grep完美運行,現在腳本正在運行。即使進程正在運行,當我在終端中運行時,pgrep sidekiq也不會給出任何結果。可能是因爲sidekiq的作用方式? – iCyborg

+1

有沒有必要重定向到'/ dev/null'。只需使用'-q'選項,即可使用'grep'或'pgrep'。 – ghoti

相關問題