Como o cron funciona?

2

Eu gostaria de escrever um aplicativo que use muito o cron . Ele executará programas em python que são executados em menos de um segundo a cada minuto.

Como juba destas linhas:

*/1 * * * * python crtip.py parameters

meu crontab -l pode ter? Como isso funciona? Ele bifurca para cada trabalho agendado?

Obrigado,

    
por Juanjo Conti 15.02.2010 / 18:23

4 respostas

9

Para resolver suas dúvidas:

  • Quantas linhas podem ter o crontab?

Não tenho conhecimento de nenhum número máximo de linhas no crontab. No entanto, mais do que algumas centenas de linhas é provavelmente bastante incomum (portanto, não é bem testado) e também é difícil de manter. Então eu provavelmente evitaria exceder isso.

  • Será bifurcada para cada trabalho agendado?

Sim.

Dito isso, cron não é muito usado para o tipo de coisa que você descreve. Se você precisar invocar um programa tão freqüentemente e com tantos parâmetros diferentes, escrever algum tipo de processo daemon / servidor é provavelmente mais apropriado. As vantagens seriam:

  • criação de log unificada e agradável (em vez de mensagens serem enviadas para o log do cron ou enviadas por correio)
  • mais controle sobre quando os programas são executados (e precisão de mais de um minuto)
  • mais desempenho, já que você não precisa sempre bifurcar internamente
  • mais fácil de manter / instalar do que um crontab gigantesco

Talvez você possa descrever com mais detalhes quantas invocações você precisa, com quais parâmetros e com que finalidade. Então podemos ajudar melhor.

    
por 15.02.2010 / 18:31
3

Aqui estão as respostas para um daemon do cron, o cron do dillon (dcron) do qual eu sou o desenvolvedor atual. Há uma variedade de daemons do cron na distribuição e as respostas serão diferentes. Vixie cron é provavelmente o mais difundido; Eu não sei as respostas para isso.

De qualquer forma, para o cron de dillon, um usuário pode ter 256 linhas significativas em seu crontab (isso é configurável no momento da compilação). A raiz pode ter muito mais do que isso (acho 65535). O Plus root pode ter múltiplos crontabs (aquele em / var / spool / cron / crontabs / root, mais quantos adicionais você quiser em /etc/cron.d /).

Os comandos do Cron são executados apenas uma vez por minuto, no início do minuto. Você poderia ter 60 comandos diferentes executados a cada minuto e prefixá-los com sleep 1 , sleep 2 e assim por diante. Mas duvido que esta seja a melhor solução para o que você tem em mente.

Sim, em nossa implementação, cada tarefa de cronograma se bifurca em um processo separado. Se houver alguma saída para stdout ou stderr, outro processo é bifurcado para enviá-la.

    
por 16.02.2010 / 23:48
2

Sim, será usado para cada trabalho de rotina. Mas se o seu servidor for moderadamente poderoso, acho que você não encontrará problemas em breve. Minhas próprias páginas pessoais estão rodando em um antigo Pentium III 1.1 GHz / 512 MB de RAM / slow IDE HD, e ele não sofre com a execução de 15 cronjobs diferentes a cada hora.

Se seus cronjobs são extremamente cpu ou I / O, a sua milhagem pode variar, mas a parte "eles correm em menos de um segundo" me faz pensar que você não verá nenhum problema. Vá em frente, pense em algo mais complexo se o tempo lhe disser para fazer isso.

    
por 17.08.2010 / 11:24
1

Eu tive um problema simular, tendo que gerenciar muitos processos no meu crontab. O que eu fiz foi escrever um script principal, que listava todos os arquivos executáveis e links em uma certa pasta (fornecida na linha de comando) e os executava consecutivamente. Esse script eu coloco no crontab com por exemplo o parâmetro "monitor", que rodaria a cada minuto e executaria todos os scripts em "$ BASEFOLDER / monitor". Desta forma, você também pode ter entradas que são lançadas a cada hora, em determinados dias, uma vez pela manhã, uma vez à noite, ...

Meu script principal faz muito mais do que isso, como fornecer um certo conjunto garantido de variáveis de ambiente, registro unificado e algumas coisas específicas do aplicativo, mas espero que você entenda a ideia. Isso é um pouco semelhante ao sistema cron.daily / cron.hourly que algumas distribuições usam.

    
por 17.08.2010 / 10:23