通过指定确切的秒来调度命令/脚本

通过指定确切的秒来调度命令/脚本

我正在使用 bash,想知道如何在稍后的指定时间执行命令/脚本,精确度为一秒?

我阅读了 - 命令的手册页at,但据我所知,只能指定分钟(而不是秒)。现在我首先使用at然后sleep让它在正确的第二个执行。为了演示,如果我想在 2005 年 21 月 22 日运行 my_script.sh,我会这样做:

echo "sleep 5; my_script.sh" | at 22.21

但如果有一个内置的命令会更好。比如at 22.21.05.

答案1

我不相信这是可能的。 cron仅精细到分钟,并且at实用程序挂钩它来完成它的工作。我认为你有正确的解决办法——睡觉X执行前几秒。

答案2

您可以将您的技术变成一个函数:

atplus () { local sec=${1##*.} time=${1%.*}; shift; echo "sleep $sec; $@" | at $time; }

试试看:

atplus 22.21.05 my_script.sh

但是,您应该知道,精度是无法保证的。

答案3

实际at可能支持秒

我认为这并不总是得到很好的支持(取决于特定的实现),但原则上at 可能支持秒。

从手册页:

-t时间运行作业于时间,以 [[CC]YY]MMDDhhmm[.ss] 格式给出

看看[.ss]最后。

这意味着,使用该-t选项,您可以输入类似的内容

echo "yourscript.sh" | sudo at -t 04281549.45

15:49:45即该命令应在(45 秒)执行。
(4月28日)

当我尝试时,正如预期的那样,输出at是:

job 38 at Wed Apr 28 15:49:45 2021

笔记:当我尝试时,仍然迟了几秒钟,但仍然执行了没有之前 15:49:45,这意味着指定的秒数是不是at内部忽略,但实际上是被考虑的。因此,当您想说“延迟此命令运行它不早于15:49:45”之类的内容时,指定秒数仍然很有用。

相关内容