At

將 atq 列表重置為零?

  • September 24, 2013

我已經使用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?

正如我們所懷疑的那樣,重新啟動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 $$ 啟動等: $$ 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

引用自:https://unix.stackexchange.com/questions/92095