Remova todas as tarefas `at`

32

Eu sei que para remover um attrabalho agendado que tenho que usar atrm "numjob1 numjob2", mas existe uma maneira fácil de fazer isso em todos os trabalhos?

robob
fonte

Respostas:

31

Você pode executar este comando para remover todos os trabalhos no atq

 for i in `atq | awk '{print $1}'`;do atrm $i;done
pradeepchhetri
fonte
2
variação nesta respostaat -l | awk '{printf "%s ", $1}' | xargs atrm
Sergiy Kolodyazhnyy
10

Você poderia fazer algo assim:

for i in $(atq | cut -f 1); do atrm $i; done
DaveEmme
fonte
No FreeBSD, a cut -f3primeira coluna é a data
David Jashi 26/10
7

Isso me parece uma linha curta:

atrm $(atq | cut -f1)
user78969
fonte
1

Aqui está minha versão do xargs, que evita aparelhos e, esperamos, seja intuitiva:

atq | cut -f 1 | xargs atrm

Você também pode receber trabalhos específicos por timestamp / userid e removê-los:

atq | grep "2018-10-22 16:" | cut -f 1 | xargs atrm
Thyag
fonte
0

Eu tinha mais de 58k trabalhos no atd (alguém reiniciou o servidor e, por algum motivo, o serviço atd não foi iniciado). A remoção dos trabalhos usando o atrm é muito dolorosa para uma fila muito alta.

Parei o atd e excluí todos os diretórios de / var / spool / atjobs e arquivos de / var / spool / atspool . Para mim funcionou.

rm -rf /var/spool/atjobs/* ; rm /var/spool/atspool/*
Felipe
fonte
Você nunca diz nada sobre começar de atdnovo, e se isso foi bem-sucedido, nem menciona para que seria a solução adequada para o Unix. Como você garantiu que os trabalhos de outros usuários não fossem excluídos?
Kusalananda
Está bem! Desculpe! Precisa iniciar o atd após o processo. Minha solução é para o "SUSE Linux Enterprise Server 12". Mas acho que pode ser usado em outras distribuições. Encontrei as informações dos diretórios em "man". Na minha situação, apenas o root está usando atd, e a remoção dos arquivos era segura.
Felipe