Desactivar de forma robusta o cron específico. {hora, dia, semana} script

24

Em vários sistemas que administro, há scripts cron que são executados através do layout /etc/cron.{hourly,daily,weekly} comumente usado. O que eu quero saber é se existe alguma funcionalidade comum 'desabilitar este script'.

Obviamente, simplesmente excluir algo de um determinado diretório irá desativá-lo, mas estou procurando uma solução mais permanente. A exclusão de /etc/cron.daily/slocate funcionará para desativar o updatedb noturno em minha máquina doméstica (em que eu nunca uso slocate ), mas na próxima vez que eu atualizar o pacote slocate, tenho certeza de que ele reaparecerá.

As duas distribuições nas quais estou mais interessado são o Gentoo e o OpenSUSE, mas espero que haja um mecanismo amplamente implementado. Ambas as distros como eu as tenho usam vixie-cron (não tenho certeza se isso importa).

    
por benizi 11.06.2010 / 08:02

8 respostas

42

Você deve poder chmod -x scriptname desativar um script, mas deixar o arquivo no lugar.

    
por 11.06.2010 / 11:02
8

As partes de execução não executam tarefas que tenham um ponto em seu nome, portanto

mv /etc/cron.d/job /etc/cron.d/job.disabled

fará o truque.

    
por 15.05.2013 / 13:21
7

Normalmente, cron.daily é invocado via /etc/crontab por meio de uma linha como, por exemplo,

run-parts --report /etc/cron.daily

man run-parts fornece as opções.

run-parts --test /etc/cron.daily mostra quais tarefas são executadas sem executá-las.

Eu prefiro fazer um subdir 'Desativado' e mover meu trabalho para lá.

Em qualquer caso, se você atualizar um pacote, é provável que o trabalho seja colocado novamente ou que os bits 'x' removidos sejam restaurados

    
por 08.12.2011 / 21:53
1

Você pode remover o pacote slocate se nunca usá-lo.

    
por 11.06.2010 / 08:23
1

Se você usar o cfengine ( link ), poderá fazer isso com a opção desabilitar. Você acabou de escrever um arquivo de promessa para um grupo de hosts e ele se aplicará na próxima execução do cfagent. Fazer isso com fantoches ou chefes ou o que quer que seja também deve ser bem simples.

    
por 11.06.2010 / 14:18
0

O /etc/cron.daily et. al. Os scripts são executados por um script chamado run-parts. Esse script varia. Por exemplo, a opção --test mencionada acima não está na máquina que estou usando neste instante.

Run-parts é um script bash. É uma ferramenta geralmente útil para executar todos os scripts no diretório que é dado como um argumento. Geralmente é encontrado em / usr / bin / run-parts.

Tem um emaranhado de lógica para decidir o que executar. Esse código contém a resposta para sua pergunta, mas também varia. Então você precisa ler o código para ser seguro.

Na versão que estou vendo, tem lógica que, ao trabalhar no diretório, verifica o /jobs.deny. Se isso existir, ele se recusará a executar qualquer script mencionado nesse arquivo em uma linha, sozinho. Supondo que você tenha essa funcionalidade, ela é incrível porque continuará funcionando quando o pacote instalado for instalado ou atualizado.

    
por 29.01.2016 / 18:11
0

Se estiver lidando com RHEL e derivados (que fornece o pacote crontabs ), você poderá desabilitar explicitamente um trabalho colocando seu nome no arquivo jobs.deny .

De página do manual crontabs / run-parts :

The execution of files can be allowed or denied by creating file jobs.allow or jobs.deny which worked similar as other allow/deny config files. The file must be created in the specified directory.

Example /etc/cron.daily/jobs.deny could contain for example 0logwatch which forbid execution of this script.

    
por 12.10.2018 / 12:22
-1

Se você não quiser o usuário crontabs, apenas desabilite o crond em sua lista de serviços.

No Debian e nas versões baseadas no Debian isto é simplesmente uma questão de remover o link simbólico do /etc/rcX.d apropriado (para o nível de execução X).

Eu não sei como você lida com serviços no SUSE ou no Gentoo.

    
por 11.06.2010 / 08:05