在linux中,是否可以每天比前一天晚3分钟运行一个脚本?

在linux中,是否可以每天比前一天晚3分钟运行一个脚本?

我的第一个解决方案是执行date +%Y%m%d%H%M该数字格式并将其放入文件中,然后每分钟从 cron 运行该脚本。然后,如果文件中的日期与日期命令匹配,脚本就会执行某些操作。然后它会在第二天加 3 分钟内更新该文件。有更好的方法来实现这一点吗?

结果是,脚本将在第一天(例如)凌晨 4:00 运行,然后第二天在凌晨 4:03 运行,第三天在凌晨 4:06 运行。它会每分钟执行一次,但只在正确的时间运行(如果阻塞)。

问题和我的解决方案清楚吗?

答案1

at您可以在脚本(或包装器)中使用该命令。给它时间运行下一次迭代。

echo '/dir/scriptname' | at 'now + 1443 minutes'

将该行尽可能靠近脚本的开头以减少漂移。

答案2

您应该使用at而不是cron,它将允许您只运行一次任务。然后它可以重新安排自己。


好吧,我想建议对您自己的解决方案进行一些改进 - 如果您坚持这样做的话。但是,仍然需要通过以下方式每分钟运行一次脚本cron

您可以使用 UNIX 时间戳达到相同的目标,而不是在脚本上次运行时进行任何设置或跟踪:

一天有60*60*24 = 86400几秒钟。如果您根据要求添加3*60 = 480,则您有86880几秒钟的时间 - 这正是您希望脚本运行的时间间隔。在脚本中,您现在可以检查当前 UNIX 时间 %(模)此秒数是否等于 0,否则中止。

如果您需要明确的首次运行,例如 2012 年 6 月 5 日凌晨 4:00,您可以先从1338861600本地时间减去关联的时间戳 ( ),检查它是否不小于零,然后继续处理差值。 ..


当然,您也可以让脚本修改它自己的crontab条目,但这样做有风险,也有点尴尬。

答案3

您可以修改脚本来检查一些标志文件以及首先运行的时间。如果时间与开始时间匹配,那么你的脚本将继续,否则它会以 exit 0 结束。你甚至可以每分钟在 cron 中启动它(或者每 3 分钟启动一次,似乎对于你的情况来说可能就足够了)。您还需要脚本来修改标志文件中下次运行的时间。这足够安全,即使在随机重启的情况下,您也不会错过任何开始时间。

相关内容