【问题标题】:Run a list of bash scripts consecutively连续运行 bash 脚本列表
【发布时间】:2009-12-25 03:58:30
【问题描述】:

我有大量的 bash 脚本可以将不同的目录备份到不同的位置。我希望每个人每天都跑。但是,我想让它们不会同时运行。

我编写了一个脚本,它基本上只是连续调用每个脚本并位于 cron.daily 中,但我想要一种方法让该脚本工作,即使我添加和删除备份脚本而无需手动编辑它。

所以我需要生成一个脚本列表(例如“dir -1 /usr/bin/backup*.sh”),然后依次运行它找到的每个脚本。

谢谢。

【问题讨论】:

    标签: bash cron


    【解决方案1】:
    #!/bin/sh    
    for script in /usr/bin/backup*.sh
    do
    $script
    done
    

    【讨论】:

    • 非常感谢,我试试看。
    • 这是不可扩展的,因为如果 glob 扩展到太多文件,它将失败。
    • 如果没有文件就会失败。
    【解决方案2】:
    #!/bin/bash
    for SCRIPT in /usr/bin/backup*.sh
    do
       [ -x "$SCRIPT" ] && [ -f "$SCRIPT" ] && $SCRIPT   
    done
    

    【讨论】:

    • x 位是一个非常好的主意,因为只需运行 chmod -x backup-foo.sh 就可以很容易地暂时禁用其中一个备份脚本。
    • @ghostdog:如果你要打电话给/bin/bash,你真的应该使用[[而不是[
    • @Siegex,谢谢。我将在适当的地方使用它,但在这种情况下,使用 [ 非常好。
    • 我知道这是非常非常古老的,但我只是偶然发现了这个答案。 [ -f ] 测试有什么用? -x 已经测试文件是否存在?
    【解决方案3】:

    如果您的系统有run-parts,那么它会为您处理好它。您可以将脚本命名为“10script”、“20anotherscript”,它们将以类似于rc*.d 层次结构的方式按顺序运行(不过,它是通过 init 或 Upstart 运行的)。在某些系统上,它是一个脚本。对我来说,它是一个二进制可执行文件。

    您的系统很可能正在使用它来运行每小时、每天等的 cron 作业,只需将脚本放入 /etc/cron.hourly/ 等目录即可

    不过,请特别注意how you name your scripts。 (例如,不要使用点。)请查看特定于您系统的手册页,因为文件命名限制可能会有所不同。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2017-05-18
      • 1970-01-01
      • 2017-07-13
      • 2017-05-15
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多