Ubuntu - 防止 crontab 在原始脚本仍然 运行 时启动新实例

Ubuntu - Prevent crontab from starting new instance when the original script is still running

在我的 Ubuntu 18.04 机器上,我有一个 Python 脚本需要每 x 小时(比如 3 小时)运行,我为此使用 crontab .但是一旦脚本开始,它可能需要超过 x 小时才能完成(比方说 5 小时)。这意味着下一个开始已经到期,而第一个仍然是 运行ning。由于各种原因,我不能简单地增加脚本启动之间的时间间隔,而必须依赖于特定的设置。

在 Windows 任务计划程序中,有一个选项可以防止在脚本仍在 运行ning 时启动新实例。 Linux crontab 有类似的东西吗?

flock 是一个很好的解决方案,如果您可以在您的系统上安装它的话。

假设您的 crontab 中有以下内容:

0 */3 * * * my_script.sh

您可以通过 flock 添加锁检查,如下所示:

0 */3 * * * flock /tmp/my_script.lock my_script.sh

您也可以传递一些选项 - 例如,您可以让 flock 最多等待 2 分钟以等待先前的锁解决,如下所示:

0 */3 * * * flock -w 120 /tmp/my_script.lock my_script.sh

如果您无法安装 flock,那么您可以编写自己的“锁定”文件并在完成更多工作后将其删除 - 或者您可以考虑使用 pgrep。

Here's some more info on both flock and pgrep options