【问题标题】:cron job to execute programs one after the other?cron作业一个接一个地执行程序?
【发布时间】:2020-03-13 01:49:34
【问题描述】:

有六个脚本,我想使用以下逻辑每天执行一次:
s11、s12可以并行启动和运行
s21、s22 只能在 s11 和 s12 完成后开始。两者都可以并行运行
s31、s32 只能在 s21 和 s22 完成后开始。两者都可以并行运行

到目前为止,我是通过 cron 开始每日 masterscript m 来做到的。 m 启动了所有六个脚本 s11-s32、s11 和 s12 直接完成了它们的工作,但其他脚本每分钟都在计数器文件中查看,并且只有当计数器具有正确的值时,它们才会开始真正的工作。每个脚本在关闭前都更改了计数器,这是移交给下一代脚本。 但由于其他原因,我的服务器太忙了,以至于新的 cron 在昨天的脚本完成之前就启动了 m,我搞砸了我的数据。

我假设其他人也有类似的问题,并且知道一个小库或其他任何东西来正确和稳定地完成这项工作,确保新系列不应该在旧系列完成之前开始......。

提前感谢您的任何提示!

【问题讨论】:

    标签: python-3.x bash shell parallel-processing cron


    【解决方案1】:

    bash中的master脚本示例,我用wait等待完成
    使用&在后台启动的脚本

    这个例子假设: 你所有的脚本都是一个文件夹/home/me/myproject/ 你有一个logs 文件夹,你想在其中捕获一些输出

    #!/bin/bash
    
    cd /home/me/myproject/   
    
    bin/s11 > logs/s11_stdout.log 2>logs/s11_stderr.log   &
    bin/s12 > logs/s12_stdout.log 2>logs/s12_stderr.log   &
    wait
    
    
    ./s21 &
    ./s22 &
    wait
    
    s31 &
    s32 &
    wait
    

    【讨论】:

    • 谢谢,这真的很有帮助!我正在考虑将它放在一个循环中,以便守护程序永久运行的底线。如果它停止,我会考虑这里描述的解决方案,cronjob 控制脚本是否正在运行,如果不是电子邮件或重新启动...:stackoverflow.com/questions/2366693/…
    • 最后一个wait 似乎没用。添加echo "$(date): 6 jobs finished" >> logs/result.log 当您想显示代码将跟随在最后一个wait 之后。
    • 最后一个wait不是没用的,当我运行主脚本时,当它完成时,我确信所有子任务都已执行并完成
    • 如果脚本意外退出,“等待”命令会如何反应?努力避免这种情况,但有时由于服务器负载或读取意外的数据格式而发生这种情况。提前致谢!
    • wait 正在等待所有子流程的完成...完成可能是意外的
    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2010-10-25
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2020-10-25
    相关资源
    最近更新 更多