我有一个系统,它使用该at
命令来安排稍后执行的简单命令。该命令使用锁,以便同时启动的多个命令按顺序执行(“互斥”)。
有一次,我登录到一台机器,发现有什么原因导致大约 250 个此类作业排队。这不应该是一个严重的问题,在等待指定的时间后,我看到命令开始运行,并且它看起来是连续的 - 当每个命令运行时,它都会以atq
每秒大约 1 个的速度从返回的列表中删除。
但最终,队列中仍有 2 个作业 - 远远超出了它们应该运行的时间。这是以下的输出watch atq
:
Every 2.0s: atq Mon Jan 4 17:55:58 2016
242 Tue Jan 5 17:44:00 2016 a root
241 Tue Jan 5 17:44:00 2016 a root
另外,运行时$ sudo find /var/spool/cron/at*
,我看到了这个:
/var/spool/cron/atjobs
/var/spool/cron/atjobs/.SEQ
/var/spool/cron/atjobs/a000f201714448
/var/spool/cron/atjobs/a000f101714448
/var/spool/cron/atspool
该atd
守护进程正在运行,并将其 PID 与其他系统守护进程进行比较,看起来它没有崩溃并重生。
我知道我可以完成atrm
这些工作,只需手动运行命令,但我更感兴趣的是了解为什么会发生这种情况以及如何防止下次发生这种情况。是什么导致这些工作陷入困境?
有问题的系统是完全最新的 Ubuntu 12.04(精确)。
答案1
我的回答是为了让这个问题在两年后不再出现在未回答的问题列表中。
正如评论中所指出的,OP 错过了这些工作不会在另一天到期。