Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在上次成功后停止cronjob_Shell_Cron_Sh - Fatal编程技术网

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

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

我正在写一个crontab脚本,它将在每个星期六每15分钟运行一次。其思想是验证外部api状态=成功与否。如果它成功了,那么这一天的工作就不应该再触发了。 现在我正在尝试递归,但我认为这不是最好的解决方案。 是否有其他解决方案来实现这一点?我正在使用Shell脚本调用api

以下是现有的代码段:

  • 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作业似乎风险更大、更脆弱。为什么文件会被错误删除?不要把它放在人们做不相关事情的地方。也许给它取个更好的名字。当前代码在主目录中创建它只是因为您的示例在主目录中运行,但当然,您可以将完整路径放置到用户具有写访问权限的任何位置。