我如何每天只运行一次程序,同时考虑可变的正常运行时间和程序可能的失败?

我需要尽快运行一个命令,但只要每天一次,直到它成功。

无法预期恒定的正常运行时间,也无法确保程序成功。

该程序要求网络访问,但不是每次我启动计算机时都可以访问网络。

我的程序将退出,例如 - 1 ,除非它成功(返回 0 )。

2
2022-06-07 14:39:55
资源 分享
答案: 2

使用外壳来提供这个。 例如,使用以下内容创建手稿:

#!/bin/sh
# Check to see if this is already running from some other day
mkdir /tmp/lock || exit 1
while ! command-to-execute-until-succeed; do
    # Wait 30 seconds between successive runs of the command
    sleep 30
done
rmdir /tmp/lock

之后,将 cron 因素纳入手稿。

2
2022-06-07 15:07:52
资源

我认为最方便的方法肯定是让您的程序在尝试之前查找文件是否存在,并且在它有效执行后创建该文档。

如果您无法自定义程序来执行此操作,请使用 cronjob 本身。 类似于以下内容:

test -e /path/to/tempfile || ( /path/to/program && touch -a /path/to/tempfile )

由于 unix 检查条件检查的方式,当 || 条件的左侧评估为 true 时,整个表达式为真,并且永远不会评估理想的一面 - IE,不调用程序。

然后在括号内,&& 要求双方评估为真,因此如果 /path/to/program 以非零返回码离开,则没有因素审查最佳 - - 表达式已经检查为假 - - 以及 /path/to/tempfile从未开发过。

1
2022-06-07 15:07:36
资源