【问题标题】:How to make sure a script only runs after another script如何确保一个脚本只在另一个脚本之后运行
【发布时间】:2012-01-09 08:32:38
【问题描述】:

我有两个 python 脚本以cronjobs 运行。

ScriptA 处理日志文件并将记录插入table,ScriptB 使用记录生成报告。

我已经安排 ScriptA 在 ScriptB 之前一小时运行,但有时 ScriptB 会在 ScriptA 完成插入之前运行,从而生成错误的报告。

如何确保 ScriptB 在 ScriptA 完成后立即运行?

编辑 ScriptA 和 ScriptB 做非常不同的事情,比如说,一个是用于保存用户数据,另一个是供内部使用。在其他地方可能有一些 ScriptC 取决于 ScriptA。

所以我不能只合并这两个工作。

【问题讨论】:

    标签: python bash cron crontab


    【解决方案1】:

    创建一个运行 ScriptA 然后 ScriptB 的单个 cron 作业不是更好吗?这样您就可以确保 ScriptB 在 ScriptA 完成之前不会运行,并且您不需要修改任何一个脚本。

    cronjob 可以运行一个简单的 shell 脚本,例如:

    #!/bin/sh
    
    python ScriptA.py
    python ScriptB.py
    

    编辑:如果你真的无法合并两个 cron 作业,你可以使用this question 中描述的技术来等待第一个进程完成。

    【讨论】:

    • 领先我几秒。为避免创建包装脚本,cron 可以是: * * * * /usr/bin/python ScriptA.py && /usr/bin/python ScriptB.py,其中 && 将确保 ScriptA 以除 RC0 之外的任何内容结束,ScriptB 将根本不运行。
    【解决方案2】:

    一种方法是确保如果这两个作业是单独的 cron 作业 - 两者之间有足够的时间来确定作业 1 的运行。

    另一种方法是锁定,正如这里的其他人所建议的那样,但请注意,cron 不会仅仅因为它因为锁定而未成功完成而重新运行您的工作。因此,要么作业 2 必须在睡眠周期中运行,直到它不再看到锁,或者相反地看到作业 1 完成的标志,否则你必须发挥创造力。

    为什么不在第一个脚本完成后触发第二个脚本并使其成为单个 cron 作业?

    【讨论】:

      【解决方案3】:

      您可以使用它的方法!有一些控制权!某处,例如在数据库中!

      所以 ScriptB 只是在设置该标志后运行!并在完成后立即将标志设置回默认状态!

      实现该标志方法的另一种方法是使用文件系统!就像@Benjamin 建议的那样!

      【讨论】:

        【解决方案4】:

        让它写入一个文件并检查文件是否存在。

        【讨论】:

        • "让 ScriptA 写入文件,然后让 ScriptB 定期运行并检查文件。"这是你的意思吗?
        猜你喜欢
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        • 2020-05-18
        • 2016-05-05
        相关资源
        最近更新 更多