Bash脚本,而[pgrep]无法按预期工作

时间:2019-03-14 20:45:08

标签: bash

我正在尝试使用shell命令(while)确定命令是否正在运行,如果尚未运行,请启动该命令,如果已经运行,请等待并重新检查,一旦结束,请再次启动该命令。注意我正在尝试确保任何一次仅运行特定命令的一个实例。这是我到目前为止所拥有的。

CSKIP=$(pgrep -x comskip)
while [ $CSKIP ]; do
    echo "comskip is already running"
    sleep 30s;
done
$COMSKIP --ini=$INI $1 # run comskip >> $LOG

我的结果:

如果COMSKIP尚未运行,它将启动我想要的。但是,如果COMSKIP已经在运行,则会出现“ comskip已经在运行”的无尽循环

1 个答案:

答案 0 :(得分:0)

您需要在循环中每次调用pgrep。您只需设置一次变量,就不会对其进行更新,因此每个测试都将获得相同的结果。

除了测试输出,您还可以测试退出状态;找到匹配项时为0,没有匹配项或收到错误时为非零。

while pgrep -x comskip >/dev/null; do
    echo "comskip is already running"
    sleep 30s;
done
$COMSKIP --ini=$INI $1 # run comskip >> $LOG