【问题标题】:crontab, schedule jobs to run in a sequence in the shortest timecrontab,调度作业在最短的时间内按顺序运行
【发布时间】:2015-03-14 12:26:21
【问题描述】:
假设 3 个作业按顺序运行,
jobA --> jobB --> jobC
~20min ~25min ~5m
一个应该在前一个完成时执行。尽管已知合理的持续时间,但个人持续时间可能会有所不同。
可以使用crontab 将这个过程保持在执行循环中,但是如何优化它以尽可能快地运行序列?
作业/进程不直接通信。
目前我在 crontab 中安排了这 3 个作业,所以 jobA 在第 0 分钟开始,jobB 在第 30 分钟开始,jobC 在第 40 分钟开始。但在大多数情况下,jobB 和 jobC 可以更早开始。
我们的想法是尽可能快地每小时运行一次此序列。
【问题讨论】:
标签:
performance
scheduled-tasks
crontab
【解决方案1】:
Cron 使用 shell 执行命令。这样运行一个长命令就足够了。
jobA && jobB && jobC
仅当jobA 成功时,使用&& 才会运行jobB。
独立安排这些作业并不能保证 A 在 B 之前完成或 C 在 B 之前完成。
【解决方案2】:
一种方法——创建单个脚本:driver.shl:
/path/to/JobA [parameters]
if [ $? -ne 0 ]; then
echo 'error' | mailx -s 'job JobA failed ' me@mycompany.com
/path/to/JobB [parameters]
if [ $? -ne 0 ]; then
echo 'error' | mailx -s 'job JobB failed ' me@mycompany.com
/path/to/JobC [parameters]
if [ $? -ne 0 ]; then
echo 'error' | mailx -s 'job JobC failed ' me@mycompany.com
在 crontab 中安排 driver.shl 每小时运行一次。