Onde colocar os cronjobs do sistema?

9

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 -e como raiz
  2. anexando-o a /etc/crontab
  3. criando um arquivo definindo o cronjob em /etc/cron.d/
  4. criando um arquivo definindo o cronjob em /etc/cron.*ly/ (mas somente se esse intervalo de tempo atender às minhas necessidades)

O que mais me preocupa é: qual destas 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?

    
por bluish 03.12.2013 / 17:03

3 respostas

12

Não use crontab -e

Eu não colocaria em crontab -e como root. Isso geralmente é menos óbvio para outros administradores e é provável que se perca com o tempo. Colocando-os em /etc/crontab você pode especificar exatamente o tempo que você quer que eles sejam executados e você pode especificar um usuário diferente também.

Locais alternativos

Se você não se preocupa com a execução do script como um usuário diferente e / ou deseja que o script seja executado semanalmente, diariamente, etc., várias distribuições fornecem diretórios onde os scripts podem ser colocados que serão automaticamente processados em um hora específica.

Por exemplo, em distribuições baseadas em 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

Frequentemente, coloco crons no nível do sistema que desejo executar em um horário específico em /etc/cron.d em vez de /etc/crontab , especialmente se forem scripts mais complexos.

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

Protegendo entradas

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

    
por 03.12.2013 / 17:31
1

Eu escolheria o # 4. Ele permite que as configurações do sistema escolham quando executar o trabalho e, normalmente, elas executam um bom trabalho de "execução quando não estão ocupadas". 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 # 1.

É menos provável que

1 seja substituído por uma atualização do sistema. Embora 3 e 4 devam ser bem seguros. tudo depende de como você atualiza embora. Sua distro pode atualizar como quiser, mas apenas 2 normalmente correm o risco de sobrescrever.

Por fim, colocaria scripts em / usr / local / bin Esse é o lugar "normal" que coloquei em todo o sistema, coisas que não são gerenciadas pelo gerenciador de pacotes da distro. / root / bin também é aceitável se for executado apenas pelo root. No entanto, isso é tudo principalmente gosto.

    
por 03.12.2013 / 17:12
0

Qualquer uma das opções acima funcionará e nenhuma das opções 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, se não três respostas diferentes.

    
por 03.12.2013 / 17:09

Tags