crontab 看到 bash 脚本正在运行,但实际上并没有

crontab 看到 bash 脚本正在运行,但实际上并没有

我有一个 python 文件,理想情况下应该一直运行。但是,有时它会崩溃,所以我必须重新启动它。因此,我有一个 cronjob,应该尝试每 5 分钟运行一次(如果它崩溃,它将至少在 5 分钟内重新启动):

*/5 * * * * bash my_script.sh

运行以下名为 my_script.sh 的 bash 脚本:

#!/bin/bash
now=$(date +"%T")
if ! pgrep -f 'filename.py'
then
    echo "$now: filename was not running, started filename" >> crontab_errors.log
    /home/ubuntu/envs/my_virtual_env/bin/python /home/ubuntu/filename.py arg1
else
    echo "$now: filename was already running" >> crontab_errors.log
fi

bash 脚本单独使用时效果很好,因此如果它是第一个实例,它就会启动代码,如果我启动另一个实例,它会提到文件名已在运行。

但是,这种行为在 crontab 中看不到。在那里,它不断提到文件已在运行,而使用命令轻松检查top清楚地表明没有名为“filename.py”的 python 进程正在运行。在我创建的名为 crontab_errors 的日志中也可以看到它:

17:55:01: filename was already running
18:00:01: filename was already running
18:05:01: filename was already running

我在这里遗漏了什么? 我的目标只是始终确保只有 1 个 filename.py 实例正在运行,否则代码就会崩溃。

提前致谢!

相关内容