At
將 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?
正如我們所懷疑的那樣,重新啟動
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