Onde colocar cronjobs do sistema?

11

Se eu precisar de um cronjob que seja executado no nível do sistema (ou seja, não específico para um determinado usuário), como você sugere que eu o crie?

  1. executando crontab -ecomo root
  2. anexando-o a /etc/crontab
  3. criando um arquivo que define o cronjob em /etc/cron.d/
  4. criando um arquivo definindo o cronjob /etc/cron.*ly/(mas apenas se esse intervalo de tempo atender às minhas necessidades)

O que mais me preocupa é: qual dessas soluções será possivelmente substituída por uma atualização do sistema ?

Além disso, acho que, se o trabalho for longo, devo colocá-lo em um arquivo de script separado , por exemplo, em /root/bin/. Você concorda?

azulado
fonte
3
Você deve indicar qual distribuição Unix ou Linux você usa.
Jlliagre
Estou aprendendo agora :) Eu pensei que era um comportamento independente de distro ...
azulada

Respostas:

13

Não use crontab -e

Eu não colocaria isso crontab -ecomo raiz. Isso geralmente é menos óbvio para outros administradores e provavelmente se perderá com o tempo. Ao colocá-los, /etc/crontabvocê pode especificar exatamente o horário em que deseja que eles sejam executados e também pode especificar um usuário diferente.

Locais alternativos

Se você não se importa em executar o script como um usuário diferente e / ou apenas deseja que o script seja executado semanalmente, diariamente, etc., várias distribuições fornecem diretórios onde podem ser colocados os scripts que serão processados ​​automaticamente em um horário específico.

Por exemplo, nas distros baseadas no Redhat:

$ ls -dl /etc/cron*
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.d
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.daily
-rw-------. 1 root root    0 Nov 23 07:42 /etc/cron.deny
drwxr-xr-x. 2 root root 4096 Nov 29 11:03 /etc/cron.hourly
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.monthly
-rw-r--r--. 1 root root  457 Sep 26  2011 /etc/crontab
drwxr-xr-x. 2 root root 4096 Sep 26  2011 /etc/cron.weekly

Costumo colocar crons no nível do sistema que eu quero executar em um horário específico, em /etc/cron.dvez de /etc/crontab, especialmente se forem scripts mais complexos.

Eu prefiro usar os diretórios abaixo /etc/cron*porque eles são um local muito mais óbvio que outros administradores de sistema saberão procurar e os arquivos aqui podem ser gerenciados através de instalações de pacotes como rpme / ou apt.

Protegendo entradas

Qualquer um dos diretórios que mencionei foi designado para colocar scripts que não serão destruídos por um gerenciador de pacotes. Se você está preocupado em proteger uma entrada do crontab, eu definitivamente não a colocaria no /etc/crontabarquivo e, em vez disso, a colocaria como um script adequado em um dos /etc/cron*diretórios.

slm
fonte
1

Eu escolheria # 4. Ele permite que as configurações do sistema escolham quando executar o trabalho, e geralmente fazem um bom trabalho como "executar quando não estiver ocupado". Alterar o agendador cron do sistema também afetaria automaticamente o tempo de execução do script.

O lado negativo é que você não tem controle direto sobre quando é executado. Se você precisar de mais controle direto, use o número 1.

1 é menos provável que seja substituído por uma atualização do sistema. Embora 3 e 4 devam ser bastante seguros. tudo depende de como você atualiza. Sua distribuição pode ser atualizada da maneira que desejar, mas apenas 2 normalmente correm o risco de serem substituídas.

Finalmente, eu colocaria scripts em / usr / local / bin. Esse é o lugar "normal" em que coloco coisas em todo o sistema, não gerenciadas pelo gerenciador de pacotes da distribuição. / root / bin também é aceitável se for executado apenas por raiz. No entanto, tudo isso é principalmente gosto.

coteyr
fonte
0

Qualquer uma das opções acima funcionará e nenhuma das alternativas acima deve ser substituída por atualizações. A escolha real se resume à opinião - quaisquer três pessoas diferentes geralmente terão pelo menos duas, senão três respostas diferentes.

John
fonte