Redefinir a lista atq para zero?

5

Eu tenho usado at por um bom tempo agora, e notei que os IDs de trabalho at parecem aumentar para sempre.

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

Curiosamente, at parece não manter dados sobre os trabalhos concluídos.

$ at -c 331
Cannot find jobid 331

É possível redefinir esse número de ID do trabalho de volta para 0?

    
por Cory Klein 24.09.2013 / 00:00

1 resposta

9

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
    
por 24.09.2013 / 02:55

Tags