【发布时间】:2010-11-18 02:48:26
【问题描述】:
我想以编程方式更改某些 cron 作业的执行时间。 我不确定我的做法是否正确,但这是计划。
可能会更改的作业将在“#change-enabled”行的末尾添加注释。
15 5 7,14,21,28 * * /path/to/executable1 #change-enabled
15 * * * * /path/to/executable2
45 5 */2 * * /path/to/executable3 #change-enabled
然后我想通过 sed 将“crontab -l”的输出通过管道传输,以捕捉和更改最后带有该注释的作业,并通过“crontab -”传输结果。
// 编辑
我的直觉告诉我不要以 root 身份执行此操作,因为新时间是使用来自第 3 方的数据确定的。 (Google Analytics Data Export API)所以 /etc/cron.d/ 是我要远离这个应用程序的东西。
这是在调试期间一直在处理我当前所有 cron 作业的命令。我一直在使用 "date +%l" 代替 "/home/user/slow-hour" 并省略 "| cron -" 以查看我的打印内容。
crontab -l | sed -e "s/^\([^ ]*\) [0-9]* \(.*#change-enabled\)/\1`/home/user/slow-hour` \2/" | crontab -
~/slow-hour 的内容将是一个脚本,它在 Google Analytics 中获取网站配置文件的每小时数据并查找最慢的时间。如果脚本会在凌晨 1 点返回任何错误,请给我发送通知,然后保释。
为了减少由于慢速时间早于当前时间而跳过一天执行的可能性,自动 cron 重新调度程序将设置为在午夜运行,最早的时间 ~/slow-hour 将返回凌晨 1 点。
根据我过去的手动 cron 作业调整,我不认为将午夜排除在最慢的时间之外对我来说是个问题。
【问题讨论】: