AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 418098
Accepted
datadevil
datadevil
Asked: 2012-08-17 00:18:42 +0800 CST2012-08-17 00:18:42 +0800 CST 2012-08-17 00:18:42 +0800 CST

编写锁定系统

  • 772

我有一个 rsync 的 cronjob,每 2 分钟运行一次,但有时需要超过 2 分钟的时间。为此,我编写了一个简单的锁定系统来检查,如果找不到文件则写入锁定文件,采取行动并删除该锁定文件。

现在,如果脚本因某种原因崩溃或被杀死,锁定文件将持续存在并导致问题。

确保 cron 任务在某个时候再次运行的好方法是什么?我想过检查锁定文件的年龄,如果超过某个时期就删除它,但我认为应该有更好更优雅的解决方案。

编辑:

我现在已经实施了羊群。我对为什么文件似乎总是存在感到有点困惑,但我发现这个页面通过将 pid 存储在文件信息中来解释它是如何工作的:

http://mattiasgeniar.be/2012/07/24/prevent-cronjobs-from-overlapping-in-linux/

cron
  • 3 3 个回答
  • 163 Views

3 个回答

  • Voted
  1. Best Answer
    user9517
    2012-08-17T00:25:22+08:002012-08-17T00:25:22+08:00

    将关键进程的 PID 存储为锁定的一部分,并在再次运行脚本时检查该进程是否仍处于活动状态。

    更好的方法是使用锁定目录而不是锁定文件,因为 mkdir 是一个原子操作。您不必检查锁是否存在,如果不存在则创建它,这为其他东西获得锁留下了机会之窗。将关键进程的PID作为文件等放在lock目录下。

    在 Linux 上,您可以使用flock实用程序来为您处理所有这一切。

    • 5
  2. pkhamre
    2012-08-17T00:23:51+08:002012-08-17T00:23:51+08:00

    检查进程和锁文件是否存在。如果只有其中一个存在,则说明有问题,必须正确处理。例如,如果锁文件存在且进程未运行,则删除锁文件并继续。

    • 2
  3. klocek
    2012-08-17T00:46:41+08:002012-08-17T00:46:41+08:00

    我知道你有自己的锁定系统,但我会用fcron和 exesev(false)

    exesev
    boolean(false)
    Can a job be executed several times simultaneously ?
    
    • 1

相关问题

  • 每 4 小时运行一次 cron 的正确语法是什么?[复制]

  • 用于 mysql 数据库清理和备份的 crontab

  • Windows cron 作业

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • crontab ifconfig 什么都不输出

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve