Um reinício do serviço atd
não redefiniu o ID da tarefa como suspeitávamos:
Exemplo
algumas submissões de teste
$ 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
verificar novamente o diretório de spool
$ sudo ls -l /var/spool/at/spool/
total 0
um reinício de atd
$ sudo /etc/init.d/atd restart Parando atd: [OK] Iniciando atd: [OK]
submissões subsequentes de testes
$ 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
Indo mais a fundo
Então, se você olhar o executável atd
com uma ferramenta como lsof
, você notará o seguinte:
$ 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
Investigando o diretório de spool
Portanto, não há nenhum arquivo aberto, mas há um diretório, /var/spool/at
, então vamos investigar um pouco mais a seguir:
$ 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
Bingo! Há a coisa que estamos procurando, um arquivo chamado .SEQ
. Mais o arquivo mostra isso:
$ sudo more .SEQ
0006c
Podemos nos convencer do fato de que esse é o valor correto usando bc
para converter isso de hexadecimal para decimal:
$ echo "ibase=16; 0006C"|bc
108
Uma experiência
Parece estar colocando o número aqui em hexadecimal. Podemos fazer uma pequena experiência e alterar esse valor para um 0. Mas primeiro pare o atd
service.
$ sudo /etc/init.d/atd stop
...edit file using vim, change it to 0...
$ sudo /etc/init.d/atd start
Agora execute outro teste de at
:
$ at -f test.bash now
job 1 at Mon Sep 23 20:52:00 2013
E o número foi reiniciado, voltamos a 1. Se eu parar, edite, inicie-o novamente e coloque o valor 0006c
de volta:
$ at -f test.bash now
job 109 at Mon Sep 23 20:53:00 2013
Mistério solucionado.
Uma nota sobre outras distros
O que foi exposto foi pesquisado em um sistema Fedora, outras distros como o Debian & O Ubuntu pode armazenar o arquivo .SEQ
em um diretório totalmente diferente. Por exemplo, o Ubuntu armazena o arquivo assim:
$ 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