【发布时间】:2009-12-25 03:58:30
【问题描述】:
我有大量的 bash 脚本可以将不同的目录备份到不同的位置。我希望每个人每天都跑。但是,我想让它们不会同时运行。
我编写了一个脚本,它基本上只是连续调用每个脚本并位于 cron.daily 中,但我想要一种方法让该脚本工作,即使我添加和删除备份脚本而无需手动编辑它。
所以我需要生成一个脚本列表(例如“dir -1 /usr/bin/backup*.sh”),然后依次运行它找到的每个脚本。
谢谢。
【问题讨论】:
我有大量的 bash 脚本可以将不同的目录备份到不同的位置。我希望每个人每天都跑。但是,我想让它们不会同时运行。
我编写了一个脚本,它基本上只是连续调用每个脚本并位于 cron.daily 中,但我想要一种方法让该脚本工作,即使我添加和删除备份脚本而无需手动编辑它。
所以我需要生成一个脚本列表(例如“dir -1 /usr/bin/backup*.sh”),然后依次运行它找到的每个脚本。
谢谢。
【问题讨论】:
#!/bin/sh
for script in /usr/bin/backup*.sh
do
$script
done
【讨论】:
#!/bin/bash
for SCRIPT in /usr/bin/backup*.sh
do
[ -x "$SCRIPT" ] && [ -f "$SCRIPT" ] && $SCRIPT
done
【讨论】:
x 位是一个非常好的主意,因为只需运行 chmod -x backup-foo.sh 就可以很容易地暂时禁用其中一个备份脚本。
/bin/bash,你真的应该使用[[而不是[
如果您的系统有run-parts,那么它会为您处理好它。您可以将脚本命名为“10script”、“20anotherscript”,它们将以类似于rc*.d 层次结构的方式按顺序运行(不过,它是通过 init 或 Upstart 运行的)。在某些系统上,它是一个脚本。对我来说,它是一个二进制可执行文件。
您的系统很可能正在使用它来运行每小时、每天等的 cron 作业,只需将脚本放入 /etc/cron.hourly/ 等目录即可
不过,请特别注意how you name your scripts。 (例如,不要使用点。)请查看特定于您系统的手册页,因为文件命名限制可能会有所不同。
【讨论】: