如果计算机在指定时间关闭,`at` 是否稍后运行命令?

des*_*ert 21 scheduling at

我想用 来安排作业at,但我不确定如果计算机在指定时间挂起会发生什么:计算机再次唤醒后会立即执行命令(如anacron)还是根本不执行(像cron)?

如果您指定一个作业在过去的特定时间和日期绝对运行,该作业将尽快运行。

这就是联机帮助页所说的内容,但是它与我的情况不太匹配:我不想指定过去运行的作业,我想在将来运行它并询问at如果计算机将如何处理它然后正在睡觉。

这不是计算机休眠时运行命令的副本,因为此问题询问是否at会唤醒计算机以执行命令,也不是如何防止 atd 运行过去的作业?因为这是关于如何防止at执行那些“旧”作业(尽管答案非常好!)。

des*_*ert 21

at执行在您唤醒计算机之前应该执行的任何命令,但可能需要几分钟才能完成。您是否给它指定了特定日期甚至都没有关系,因为您可以轻松测试:

$ sudo date -s "2017-12-15 23:57:00"
$ at 23:59 17-12-15 <<<'echo executed >at_test'
job 1 at Fri Dec 15 23:59:00 2017
# suspend, wake after four minutes
$ date
Sat Dec 16 00:01:17 CET 2017
$  cat <at_test || atq
bash: /home/dessert/at_test: No such file or directory
1       Fri Dec 15 23:59:00 2017 a dessert
# wait a few minutes
$  cat <at_test || atq
executed
Run Code Online (Sandbox Code Playgroud)

因此,at 20:00 today当您再次打开计算机电源时,您添加的作业很可能会在三天后突然执行。如果你想防止这种情况,你可以检查作业本身的时间,就像这里建议的那样:如何防止 atd 运行过去的作业?