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

iCy*_*org 5 unix bash shell cron awk

我用followin代码创建了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
Run Code Online (Sandbox Code Playgroud)

检查sidekiq进程是否正在运行.我将把这个脚本放在cron中每天运行,所以如果sidekiq没有运行,它将自动启动.

我的问题是,与

ps -aux | grep sidekiq
Run Code Online (Sandbox Code Playgroud)

即使进程没有运行,它也会显示出来

myname 27906  0.0  0.0  10432   668 pts/0    S+   22:48   0:00 grep --color=auto sidekiq
Run Code Online (Sandbox Code Playgroud)

而不是没有.这在grep中计算,因此即使进程未运行,它也会显示为"sidekiq"进程正在运行.怎么不算这个结果?我相信我必须使用awk,但我不知道如何在这里使用它来更好地过滤.

Ini*_*ian 8

grepps输出中排除结果.做

ps -aux | grep -v grep | grep sidekiq
Run Code Online (Sandbox Code Playgroud)

(或)regEx搜索进程名称,即s后跟进程名称的其余部分.

ps -aux | grep [s]idekiq
Run Code Online (Sandbox Code Playgroud)

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

pgrep sidekiq
Run Code Online (Sandbox Code Playgroud)

一种有效的使用方式pgrep如下所示.

if pgrep sidekiq >/dev/null
then
     echo "Process is running."
else
     echo "Process is not running."
fi
Run Code Online (Sandbox Code Playgroud)

  • 没有必要将事物重定向到`/ dev/null`.只需使用`-q`选项,用于`grep`或`pgrep`. (3认同)