如何在上一次成功后停止 cronjob

how to stop the cronjob after the previous success

我正在编写一个 crontab 脚本,该脚本将在每个星期六每 15 分钟 运行。这个想法是验证外部 api 状态 =SUCCESS 与否。如果成功,则当天的 cronjob 不应再触发。 现在正在尝试递归,但我认为这不是最佳解决方案。 有没有其他解决方案来实现这一目标?我正在使用 Shell 脚本调用 api.

这是现有的片段:

添加另一个 cron 作业,以便它在星期五晚上,在另一个作业开始之前删除标志文件 运行ning:

59 23 * * 5 rm .succeeded.txt

然后更改您的脚本,使其在该文件存在时中止,并在成功时创建它。

#!/bin/bash

test -e .succeeded.txt && exit
 
if [[ $(curl -X GET "api") == "SUCCEEDED" ]];then 
    trigger email
    touch .succeeded.txt
fi

我也尝试修复您脚本中的其他错误,但我不得不猜测很多事情。这假设 "SUCCEEDED"curl 的唯一输出,当 GET 起作用时。

将命令放在变量中是一种无用的复杂化,它会使您的脚本更长并且(非常轻微)更慢,但此外,当命令包含嵌入的引号时,它会产生自己的问题;参见例如http://mywiki.wooledge.org/BashFAQ/050

... 但是,当然,您可能真的想 运行 命令。您的尝试只会检查变量中的字符串是否等于 "SUCEEDED",当然它永远不会等于。

另一个问题是您生成了多个 validate.sh 作业,每个作业都会递归并重试。你想要其中之一,而不是两者。我按照你的时间表去做,每份工作只试一次。