Como desativar tudo no crontab -l?


71

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

Respostas:


64

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


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

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

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 (#).


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


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

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 :)

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.


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 #

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.