Como desativar tudo no crontab -l?

71

Eu só quero pausar tudo. Não execute nada listado crontab -l.

Alex
fonte

Respostas:

64

crontab -eem seguida, comente cada linha com a qual você não deseja executar #.

gregf
fonte
135

Primeiro, faça backup do crontab:

crontab -l > my_cron_backup.txt

Então você pode esvaziá-lo:

crontab -r

Restaurar:

crontab my_cron_backup.txt
crontab -l
kubanczyk
fonte
2
Isto é particularmente útil quando /tmpestá corrompido (e se o seu crontab -e usa mktempno /tmp.
Kevin Lee
11
+1 Finalmente, é isso que funcionou para mim. Obrigado
Pavan
@alex Esta deve ser a resposta aceita
Luis Ferrão
crontab -ré o que eu estava procurando. Obrigado !
forzagreen 26/02
65

Você tem acesso root? Apenas pause o cron

sudo /etc/init.d/crond stop

Em seguida, reinicie-o quando estiver pronto

sudo /etc/init.d/crond start
muffinista
fonte
5
Isso pressupõe que você deseja interromper o crontab para todos os usuários, incluindo o root. A resposta selecionada e a resposta de kubanskamac o faria apenas para o usuário atual (desejado?).
Kevin K
nosso serviço secreto havia sido interrompido. Isso nos apontou na direção certa para verificar se o crond estava em execução e reiniciar.
Paul
4
Se você estiver no Ubuntu você pode usarsudo service cron stop
Joel
11
No Debian, isso é /etc/init.d/cron stop.
Faheem Mitha 19/07
2
@Faheem no Debian hoje em dia também é service cron stop.
Stephen Kitt
10

Se você estiver usando o vi como editor, basta entrar :%s/^/#/no modo de comando. Em todas as linhas (%), ele substitui (s ///) o início da linha (^) por um hash (#).

andunix
fonte
Se você não estiver usando o vi como editor padrão, poderá "forçar" o uso do vi como EDITOR=vi; crontab -ee, em seguida , usar o truque acima.
Betlista
2
Para descomentar, o comando é:%s/^#//
NP01
3

Não ficou satisfeito com as opções acima, pois elas não eram únicas.

Desabilitar crontab -l | perl -nle 's/^([^#])/# $1/;print' | crontab

Para habilitar crontab -l | perl -nle 's/^#\s*([0-9*])/$1/;print' | crontab

exemplo de uso (editado para mostrar que não desativa comentários)

$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^([^#])/# $1/;print'|crontab
$ crontab -l
# Comment
# 0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^#\s*([0-9*])/$1/;print'|crontab
$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh

Testei isso no RHEL e no AIX e deve funcionar imediatamente, sem que seja necessário instalar nada

segaps
fonte
11
Também pode procurar detalhes específicos no cronjob crontab -l | Como faço para criar um perl -nle 's / ^ # \ s * ([0-1 *]) / $ 1 /; print if /.+mytexttofind.+/'
Jason
Você poderia explicar por que os comentários não são afetados? Qual é o padrão que você usa para detectá-los?
Sopalajo de Arrierez
Hm, sob Debian Jessie eu recebo o seguinte erro: crontab: usage error: file name must be specified for replace. Parece que você precisa especificar um arquivo (?) Ao usá-lo crontabsem nenhum parâmetro (que é o replacepadrão).
Fritzmg 4/12
2

Nos meus testes limitados, definir o shell como / bin / false funciona. Você ainda verá a /opt/job.shexecução em seus logs, mas será um noop:

SHELL=/bin/false

*/1 * * * *    root  /some/job.sh
cinza
fonte
1

Em qualquer tipo de Unix / Linux que eu conheça:

mv /var/spool/cron  /var/spool/cron_is_disabled

Este:

  • desativa crontabs de todos os usuários
  • mas não system / etc / crontab (/etc/cron.daily. etc.)
  • persiste em uma reinicialização
  • é um one-liner, duh :)
kubanczyk
fonte
1

Eu recebi a ideia da resposta fornecida por @segaps

Desabilitar:

crontab -l | awk '{print "# "$1}' | crontab

Para habilitar:

crontab -l | cut -c 3- | crontab

O único problema com a solução fornecida pelo segaps é que ele descomente os trabalhos, que já são comentados pelo usuário.

Sarvsav Sharma
fonte
0

Para fazer isso, usando o nano como editor:

sudo env EDITOR=nano crontab -e

em seguida, comente cada linha com a qual você não deseja executar #

Sam Smith
fonte