我有一个 Python 脚本来执行一些自动工作,该脚本托管在 Ubuntu 20.04 服务器上,我使用crontab
每 10 分钟运行一次,但该脚本运行了两次,我必须定期终止第二次脚本。
是否有任何非 Python 解决方案可以避免此问题并确保脚本仅在尚未运行时运行?
答案1
是否有任何非 Python 解决方案可以避免此问题并确保脚本仅在尚未运行时运行?
是的,在狂欢,您可以通过脚本的文件名检查脚本是否正在运行(用于运行脚本的命令)在 bash shell 脚本文件中,如下所示:
#!/bin/bash
if [ $(/bin/pgrep -f "script_file_name.sh") ]; then # Change "script_file_name.sh" to your actual script file name.
echo "script running"
# Command when the script is runnung
else
echo "script not running"
# Command when the script is not running
fi
或者在一行中(你可以直接在一行中crontab
使用)像这样:
[ $(/bin/pgrep -f "script_file_name.sh") ] && echo "script running" || echo "script not running"
答案2
您可能正遭受僵尸脚本停滞的困扰。在这种情况下,您可能仍会遇到问题,因为僵尸脚本将一直存在,直到被终止或系统重新启动。我在 crontab 命令中使用一个名为 timeout 的实用程序来确保脚本只能在被终止之前运行一段时间,这将确保下次 cron 尝试执行时不会出现僵尸进程。
timeout 1m sh -c 'python3 ik_api_timer.py kanaha'
这将只允许脚本在被终止之前最多运行 1 分钟。