我有一个包含方法的shell脚本:
start(){
echo "Hello world"
}
stop(){
ps -ef|grep script.sh|grep -v grep|xargs kill
}
while [ "$1" != "" ]; do
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac
shift
done
我将使用以下命令运行此脚本:
./script.sh start
来调用开始方法。现在,我想检查这个进程是否已经在运行中,如果已经在运行中,则退出。我尝试了一些在线解决方案,但都没有起作用。请有人帮忙。
我尝试过的解决方案是:if [ -f /var/tmp/script.lock ]; then
echo "Already running. Exiting."
exit 1
else
touch /var/tmp/script.lock
fi
<main script code>
#some code
rm /var/tmp/script.lock
另外一个是:
PID=$(ps -ef | grep script.sh|grep -v grep)
if [ -z $PID ]; then
echo "Process already running"
exit
fi
这些解决方案在进程刚开始时就无法起作用并退出。
-z $PID
将为真。 - Barmarps | grep
命令将会找到正在运行测试的脚本,因为它们的名称是相同的。 - Barmarflock
是你的好朋友。 - Charles Duffy