守护进程服务状态检查。 “$?”总是返回0

时间:2013-12-04 13:02:55

标签: bash unix sh daemon

我有文件“sleepdaemon”,它启动python程序作为服务 我运行这个脚本:

sudo /etc/init.d/sleepdaemon start

但是当我总是检查状态$?= 0时 这是我检查的方式

  if [ "$?" -eq 0 ]; then
    echo "Process is running"
  fi
  if [ "$?" -eq 1 ]; then
    echo "Process is not running"
  fi
  if [ "$?" -eq 2 ]; then
    echo "Process is not running"
  fi

有什么问题?

2 个答案:

答案 0 :(得分:2)

每次测试后都会重置$?的值,因此您需要在测试前将其保存在变量中,或者使用case ... esac语句。

答案 1 :(得分:0)

sudo返回命令的结果,如果无法运行,则返回1。为每个命令设置?

if (( $? == 0 )); then
    echo "Process is running"

elif (( $? == 1 )); then
    echo "Process is not running" >&2

elif (( $? == 2 )); then
    echo "Process is not running" >&2
else
    echo "Unknown exit code $?" >&2
fi

使用(( ... ))进行算术比较 - 它更容易,更安全。你应该总是有一个默认的长期停止,你应该向stderr报告错误,而不是stdout。

如果$?始终为零,请查看sleepdaemon的文档(我试过,但无法在任何地方找到返回代码)。