gpt4 book ai didi

bash - 通过 crontab 运行时,PID 检查器将不起作用

转载 作者:行者123 更新时间:2023-11-29 13:59:53 24 4
gpt4 key购买 nike

好的,所以我有一个脚本,其中包含一个检查 postgres 数据库的无限循环。那很好用。为了确保该进程将继续运行,我正在使用 cron 来继续每分钟执行一次该文件。为了停止这种情况的多个实例,我编写了这个 PID 检查脚本。

 SCRIPTNAME=`basename $0`
PIDFILE="/var/run/${SCRIPTNAME}.pid"

if [ -e ${PIDFILE} ]; then
PID=`cat ${PIDFILE}`;

echo "Found PID ${PID}"

RUNNING=`ps -p ${PID} -o pid=`
if [ ${RUNNING} -eq ${PID} ]; then
RUNNINGNAME=`ps -p ${PID} -o command=`
if [ `echo "${RUNNINGNAME}" | grep -c *${SCRIPTNAME}*` -eq "1" ]; then
echo "${SCRIPTNAME} is already running."
exit 1
else
echo "Wrong PID file."
fi
else
echo "Outdated PID file."
fi
else
echo "No PID file."
fi
echo $$ > ${PIDFILE}

当我使用 ./script.sh 运行进程时,它不会让我在不同的命令行中运行另一个实例。但问题是,当我在 cron 中初始化它时,它似乎会创建多个实例,而不考虑我的 pid 检查。任何帮助将非常感激。

最佳答案

通过简单地删除代码部分

if [ echo "${RUNNINGNAME}" | grep -c *${SCRIPTNAME}* -eq "1" ]; then<br/>
echo "${SCRIPTNAME} is already running."
exit 1
fi

并将其替换为简单的 exit 1我能够让它工作。

出于某种原因,cron 不喜欢脚本的这一部分。手动运行时,最好保留它,因为如果您的脚本实际上是在存储的 pid 下运行的脚本,它会有所帮助。这是一个很小的机会,通常只会由于用户错误而发生,但建立这种可能性是一个好主意。

我仍然不确定为什么这会在 cron 中中断,但确实如此。

关于bash - 通过 crontab 运行时,PID 检查器将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22620655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com