Shell 如何在上次成功后停止cronjob
我正在写一个crontab脚本,它将在每个星期六每15分钟运行一次。其思想是验证外部api状态=成功与否。如果它成功了,那么这一天的工作就不应该再触发了。 现在我正在尝试递归,但我认为这不是最好的解决方案。 是否有其他解决方案来实现这一点?我正在使用Shell脚本调用api 以下是现有的代码段:Shell 如何在上次成功后停止cronjob,shell,cron,sh,Shell,Cron,Sh,我正在写一个crontab脚本,它将在每个星期六每15分钟运行一次。其思想是验证外部api状态=成功与否。如果它成功了,那么这一天的工作就不应该再触发了。 现在我正在尝试递归,但我认为这不是最好的解决方案。 是否有其他解决方案来实现这一点?我正在使用Shell脚本调用api 以下是现有的代码段: Cronjob: */15 * * * 6 validate.sh 脚本: status='curl -X GET "api"' if [[ $status == &quo
- Cronjob:
*/15 * * * 6 validate.sh
- 脚本:
status='curl -X GET "api"' if [[ $status == "SUCCEEDED" ]];then trigger email else sleep 180 ./validate.sh fi
cron
作业,以便在周五晚上,在另一个作业开始运行之前删除标志文件:
59 23 * * 5 rm .succeeded.txt
然后更改脚本,使其在该文件存在时中止,并在成功时创建该文件
#/bin/bash
测试-e.successed.txt&退出
如果[[$(curl-X GET“api”)=“successed”];然后
触发电子邮件
touch.successed.txt
fi
我也试图修复你脚本中的其他错误,但我不得不猜测很多事情。这假设GET
工作时,curl
的唯一输出是成功的
将命令放在变量中是一个无用的复杂过程,它会使脚本变长(非常轻微)变慢,但另外,当命令包含嵌入引号时,它也会产生问题;见例
。。。但当然,您可能想实际运行该命令。您的尝试只会检查变量中的字符串是否等于“SUCEEDED”
,当然这永远不会是
另一个问题是,您正在生成多个validate.sh
作业,每个作业都会递归并重试。你想要一个或另一个,而不是两个。我遵守了你的计划,每项工作只做一次。这很有效。。但是还有其他更好的选择吗,比如在条件满足时终止cron作业。因为如果由于任何原因错误地删除了该文件,那么在生产中的风险就会很高。终止cron作业似乎风险更大、更脆弱。为什么文件会被错误删除?不要把它放在人们做不相关事情的地方。也许给它取个更好的名字。当前代码在主目录中创建它只是因为您的示例在主目录中运行,但当然,您可以将完整路径放置到用户具有写访问权限的任何位置。