huy*_*huy 4 linux scheduled-tasks cron
我正在维护一个数据仓库系统,该系统涉及许多相关工作(数据导入、转换等)。我一直在使用 Linuxcrontab来管理它们,直到作业之间的依赖关系变得复杂。
基本上我正在寻找一些cron替代品来帮助我解决以下情况:
在00:05(easy)处运行作业 A。通常这是导入作业。
安排作业 B、C、D 在作业 A 完成后运行。作业 D 仅在作业 A 完成后 30 分钟运行(以分配负载)。这些是转换作业。
作业 E 在所有 B、C、D 完成后运行。通常这是将聚合数据带到 Web 前端数据库的工作。
所有这些都发生在同一个节点上。
我想它看起来像一个拓扑图。
A--> B -------------->---> E
\-> C -------------/ /
\-> (delay 30mins) -> D
Run Code Online (Sandbox Code Playgroud)
有没有这么简单的基于 linux 的工具支持这个?我已经研究过Airbnb 的 Chronos,但对于我的需求来说似乎有点过分了。
编辑:上述场景只是正在发生的事情的简化版本。我们有更多的日常工作,而且依赖性要复杂得多。所以我实际上是在寻找一些“类固醇上的 cron”而不是逐案的 bash 脚本来满足每种情况。
正如 Michael Kjörling 在评论中所建议的那样,您应该能够使用一个简单的 bash 脚本来做到这一点。像这样的东西:
#!/usr/bin/env bash
## Log file to which the "echo" commands bellow will write
logfile="/tmp/$$.log"
## Change "ls /etc >/dev/null " to reflect the actual
## jobs you want to run but keep the "&& echo job N finished" as is.
jobA="ls /etc >/dev/null"
jobB="ls /etc >/dev/null && echo 'job B finished' >> $logfile"
jobC="ls /etc >/dev/null && echo 'job C finished' >> $logfile"
jobD="ls /etc >/dev/null && echo 'job D finished' >> $logfile"
jobE="ls /etc >/dev/null";
## Run job A, launch jobs B and C as soon as A is finished
## and launch job D 30 minutes after A finishes.
eval $jobA && (sleep 30 && eval $jobD) & eval $jobB & eval $jobC &
## Now, monitor the logfile and run job E when the rest have finished
while true; do
lines=`wc -l $logfile | cut -f 1 -d ' '`;
echo "$logfile : $lines"
## The logfile will contain 4 lines if all jobs have finished
if [ "$lines" -eq 3 ];
then
## Run job E
eval $jobE
## Delete the logfile
rm $logfile
## exit the script
exit 0;
fi
## Only check if the jobs are finished once a minute
sleep 60;
done
Run Code Online (Sandbox Code Playgroud)
如果您cron习惯于在 00:05 启动此脚本,它应该可以执行您想要的操作。这里的主要技巧是使用subshels ()和&&. Subshels 允许您运行多个后台作业,并且&&仅在另一个作业成功退出后才运行作业。
小智 5
这些看起来很有趣:
没那么简单但是功能强大,apache支持,代码配置,现在广泛使用
类似java气流,配置更简单
Python 中基于 DAG 的简单作业调度程序
Luigi 是一个 Python 模块,可帮助您构建复杂的批处理作业管道。
这些都是 python 项目(期待 digdag),旨在用漂亮的 GUI 替换 cron 以查看依赖关系图。
我曾经使用 bash 来处理这些东西,但是当你成长为复杂的系统时它会变得很丑陋。
| 归档时间: |
|
| 查看次数: |
12763 次 |
| 最近记录: |