![如果计算机在指定时间关闭,“at”是否会稍后运行命令?](https://linux22.com/image/15749/%E5%A6%82%E6%9E%9C%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9C%A8%E6%8C%87%E5%AE%9A%E6%97%B6%E9%97%B4%E5%85%B3%E9%97%AD%EF%BC%8C%E2%80%9Cat%E2%80%9D%E6%98%AF%E5%90%A6%E4%BC%9A%E7%A8%8D%E5%90%8E%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我想使用 来安排作业at
,但我不确定如果计算机在指定时间挂起会发生什么:计算机再次唤醒后会立即执行该命令(如使用anacron
)还是根本不会执行该命令(就像cron
)?
如果您指定作业绝对在过去的特定时间和日期运行,则该作业将尽快运行。
这就是联机帮助页所说的内容,但是它与我的情况不太相符:我不想指定过去运行的作业,我想在将来运行它并询问at
如果计算机将如何处理它那时正在睡觉。
这不是重复的计算机睡眠时按命令运行因为这个问题问是否at
会唤醒计算机来执行命令,所以它也不是重复的如何防止atd运行过去的作业?因为这是关于如何防止at
执行那些“旧”作业(不过有一个非常好的答案!)。
答案1
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
因此,您使用添加的作业at 20:00 today
很可能会在三天后当您再次打开计算机时突然执行。如果您想防止这种情况发生,您可以检查作业本身的时间,如下所示:如何防止atd运行过去的作业?