Linux

如何檢查/啟動程序 |shell腳本中的錯誤

  • July 19, 2010

如果要檢查程序是否正在執行,如果沒有則啟動它。我下面的腳本有問題,總是說一個程序正在執行。怎麼了?

$ ./check_n_run thisisnotrunning
./check_n_run: thisisnotrunning is already running

這是腳本:

$ cat check_n_run

#!/bin/sh

USAGE="usage: $0 processname"
if [ $# -ne 1 ] ; then
       echo "$USAGE" >&2
       exit 1
fi

ps ax | grep -v grep | grep $1> /dev/null
if [ $? -eq 1 ]
then
 echo "$1 not running"
 # start here      
else
 echo "$0: $1 is already running" >&2
fi

exit 0

您的腳本中的問題是(使用您正在使用的 shell)在管道中,每個命令都在單獨的子 shell 中執行,並且它們的狀態都不會傳播到父程序。所以之後command1 | command2,$?始終為 0。

即使您修復了它,您的腳本也非常不可靠:它會匹配名稱包含您的程序作為子字元串的程序。Linux 提供的pidof命令完全符合您的要求。

然而這仍然不理想,因為可能有另一個同名的程序。最好使用適當的服務管理器,例如 Debian/Ubuntu 的start-stop-daemon,或新貴服務。lockfileWrikken 提到的(來自procmail)也是一種可能性。

引用自:https://serverfault.com/questions/161627