检查进程是否正在运行,如果没有,请使用Cron重新启动它

时间:2016-12-07 17:33:29

标签: bash shell unix awk cron

我创建了带有以下代码的restart.sh

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

检查sidekiq进程是否正在运行。我将把这个脚本放在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,但我不知道如何在这里使用它来更好地过滤。

1 个答案:

答案 0 :(得分:6)

grep输出中排除ps结果。做

ps -aux | grep -v grep | grep sidekiq

(或)对流程名称进行regEx次搜索,即s,然后是流程名称的其余部分。

ps -aux | grep [s]idekiq

在搜索使用过程grep pgrep中直接使用流程名称来避免此类冲突

pgrep sidekiq

使用pgrep的有效方法如下所示。

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