我正在尝试使用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已经在运行”的无尽循环
答案 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