我想以编程方式更改某些 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 作业调整,我预计将午夜排除在最慢的时间之外不会成为我的问题。
最佳答案
定时任务-l | sed '/change-enabled$/s/pat/repl/' |定时任务-
关于linux - 将 sed 应用于 crontab 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251784/