将 atq 列表重置为零?

将 atq 列表重置为零?

我已经使用了at一段时间了,我注意到at作业 ID 似乎永远在增加。

$ atq
332 Mon Sep 23 17:25:00 2013 a cklein
$ # I'm up to 332 at jobs!

有趣的是,at似乎没有保留有关已完成工作的数据。

$ at -c 331
Cannot find jobid 331

是否可以将此作业 ID 号重置回 0?

答案1

正如我们怀疑的那样,重新启动atd服务并没有重置作业 ID:

例子

一些测试提交

$ at -f test.bash now
job 105 at Mon Sep 23 20:04:00 2013
$ at -f test.bash now
job 106 at Mon Sep 23 20:04:00 2013

仔细检查线轴目录

$ sudo ls -l /var/spool/at/spool/
total 0

重启atd

$ sudo /etc/init.d/atd restart 停止 atd: [ OK ] 启动 atd: [ OK ]

后续测试提交

$ at -f test.bash now
job 107 at Mon Sep 23 20:05:00 2013
$ at -f test.bash now
job 108 at Mon Sep 23 20:05:00 2013

深层发掘

atd因此,如果您使用诸如此类的工具查看可执行文件,lsof您会注意到以下内容:

$ sudo lsof | grep atd
atd       22341      root  cwd       DIR              253,0      4096    2103653 /var/spool/at
atd       22341      root  rtd       DIR              253,0      4096          2 /
atd       22341      root  txt       REG              253,0     24712    1192814 /usr/sbin/atd
atd       22341      root  mem       REG              253,0     57440     393478 /lib64/libnss_files-2.13.so
atd       22341      root  mem       REG              253,0    387352     393694 /lib64/libfreebl3.so
atd       22341      root  mem       REG              253,0     43304     393695 /lib64/libcrypt-2.13.so
atd       22341      root  mem       REG              253,0     99128     393328 /lib64/libaudit.so.1.0.0
atd       22341      root  mem       REG              253,0     22536     393671 /lib64/libdl-2.13.so
atd       22341      root  mem       REG              253,0   1956608     393664 /lib64/libc-2.13.so
atd       22341      root  mem       REG              253,0     13776     393333 /lib64/libpam_misc.so.0.82.0
atd       22341      root  mem       REG              253,0     55280     393331 /lib64/libpam.so.0.82.2
atd       22341      root  mem       REG              253,0    124592     393682 /lib64/libselinux.so.1
atd       22341      root  mem       REG              253,0    151456     393578 /lib64/ld-2.13.so
atd       22341      root    0u      CHR                1,3       0t0       4066 /dev/null
atd       22341      root    1u      CHR                1,3       0t0       4066 /dev/null
atd       22341      root    2u      CHR                1,3       0t0       4066 /dev/null
atd       22341      root    3uW     REG              253,0         6    1966556 /var/run/atd.pid

调查线轴目录。

所以没有任何文件打开,但有一个目录,/var/spool/at所以让我们进一步调查一下:

$ sudo ls -la /var/spool/at/
total 20
drwx------.  3 daemon daemon 4096 Sep 23 20:42 .
drwxr-xr-x. 15 root   root   4096 Aug  8  2011 ..
-rw-------.  1 daemon daemon    6 Sep 23 20:05 .SEQ
drwx------.  2 daemon daemon 4096 Sep 23 20:42 spool

答对了!这是我们正在寻找的东西,一个名为.SEQ.更多文件显示了这一点:

$ sudo more .SEQ 
0006c

我们可以让自己相信这是正确的值,用于bc将其从十六进制转换为十进制:

$ echo "ibase=16; 0006C"|bc
108

一个实验

似乎将数字以十六进制形式输入此处。我们可以做一个小实验,将此值更改为 0。但首先停止服务atd

$ sudo /etc/init.d/atd stop
...edit file using vim, change it to 0...
$ sudo /etc/init.d/atd start

现在运行另一个测试at

$ at -f test.bash now
job 1 at Mon Sep 23 20:52:00 2013

并且数字已重新启动,我们又回到 1。如果我停止、编辑、再次启动并将值放回0006c

$ at -f test.bash now
job 109 at Mon Sep 23 20:53:00 2013

谜团已揭开。

关于其他发行版的说明

以上是在 Fedora 系统上进行的侦查,其他发行版(例如 Debian 和 Ubuntu)可能将该.SEQ文件存储在完全不同的目录中。例如 Ubuntu 像这样存储文件:

$ sudo pwd
/var/spool/cron/atjobs
$ sudo ls -la
total 12
drwxrwx--T 2 daemon daemon 4096 Sep 23 21:19 .
drwxr-xr-x 5 root   root   4096 Oct 17  2012 ..
-rw------- 1 daemon daemon    6 Sep 23 21:19 .SEQ

相关内容