我正在使用以下内容来保持在我的服务器上运行的单个脚本实例。我有一个 cronjob 每分钟运行一次。
#!/bin/bash
if [[ $# < 1 ]]; then
echo "Name of pid file not given."
exit
fi
# Get the pid file's name.
PIDFILE=$1
shift
if [[ $# < 1 ]]; then
echo "No command given."
exit
fi
echo "Checking pid in file $PIDFILE."
#Check to see if process running.
PID=$(cat $PIDFILE 2>/dev/null)
if [[ $? = 0 ]]; then
ps -p $PID >/dev/null 2>&1
if [[ $? = 0 ]]; then
echo "Command $1 already running."
exit
fi
fi
# Write our pid to file.
echo $$ >$PIDFILE
# Get command.
COMMAND=$1
shift
# Run command
$COMMAND "$*"
现在我发现我的脚本由于某种原因挂起,因此被卡住了。我想要一种方法来检查它$PIDFILE
是否“旧”,如果是,则终止该进程。我知道这是可能的(检查文件上的时间戳),但我不知道语法,或者这是否是个好主意。此外,当此脚本运行时,CPU 应该会被大量使用。如果它挂起(很少见,但到目前为止至少发生过一次),CPU 使用率下降到 0%。如果我可以检查该进程是否真的挂起/未激活,那就太好了,但我不知道是否有一种简单的方法可以做到这一点(而且我不想在它被杀死的地方出现很多误报,但它是运行良好)。