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

标签 ubuntu cron

在我的 Ubuntu 18.04 机器上,我有一个 Python 脚本需要每 x 小时运行一次(比如说 3 小时),我使用 crontab为了那个原因。但是一旦脚本启动,可能需要超过 x 小时才能完成(比如说 5 小时)。这意味着下一次启动已经到期,而第一次启动仍在运行。由于各种原因,我不能简单地增加脚本启动之间的时间间隔,而必须依赖于特定的设置。
在 Windows 任务计划程序中,有一个选项可防止在脚本仍在运行时启动新实例。 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

关于Ubuntu - 当原始脚本仍在运行时,防止 crontab 启动新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72026590/

相关文章:

linux - 通过 SSH 连接到 Openstack 实例 - 错误

c++ - cmake 变量和 cmake 参数之间的区别

c++ - 一些适用于 Ubuntu (Gnome) 的优秀 C++ IDE?

linux - 当我使用协作 github 存储库时,crontab 无法识别 github 用户名

git commit 找不到在 cron 作业中运行的(全局)配置

java - 为 Spring @Scheduled 提供时区?

linux - bash,无法执行二进制文件

java - 使用 SpringBoot-App 作为 Ubuntu 18.04 服务运行 Tomcat 9

linux - 脚本手动工作但不通过 crontab

mysql - crontab 是否使 mysql 连接保持打开状态?