Bash:仅当 Python 脚本尚未运行时才运行它

Bash:仅当 Python 脚本尚未运行时才运行它

我有一个 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 分钟。

相关内容