我创建了带有以下代码的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,但我不知道如何在这里使用它来更好地过滤。
答案 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