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,但我不知道如何在这里使用它来更好地过滤.
grep从ps输出中排除结果.做
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)