我尝试同时运行以下命令,但只有第一个命令可以运行,但第二个命令被相同的进程 ID 阻止。
sh ./controller.sh $myfile/a.sh start '1' 'today'
sh ./controller.sh $myfile/a.sh start '2' 'early'
控制器.sh
progpath=$1
prog=$(basename $progpath)
get_pid() {
echo "`ps -ef | grep $prog | grep -v grep | grep -v $0 | awk '{print $2}'`"
}
local pids=$(get_pid)
if [ -n "$pids" ]; then
echo "$prog (pid $pids) is already running!"
return 0
fi
如何通过更改controller.sh成功运行2命令?
答案1
您的脚本有几个问题。我在这里不做评论。只是给你一个更好的方法使用lockfile
fromprocmail
包:
progpath=$1
prog=$(basename "$progpath")
LOCKFILE="/tmp/$prog-$2-$3.lock"
lockfile -r0 "$LOCKFILE" || exit
...
# remove the lockfile when script exits
rm -f "$LOCKFILE"
答案2
prog=$@
pids=$(ps -ef | grep "\"$prog\"" | awk '{print $2}')
if [ -n "$pids" ]; then
echo "$prog (pid $pids) is already running!"
return 0
fi