我有一个 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 实例正在运行,否则代码就会崩溃。
提前致谢!