Por que o cron oferece apenas granularidade de minuto?

5

Parece que há casos de uso para coisas que você gostaria de executar uma vez a cada 5 segundos, duas vezes por minuto, etc, mas isso é impossível com o cron. Por que a granularidade do cron de segundo nível não está embutida nos sistemas operacionais modernos? (Ou tem e eu não sei ..?)

    
por Kevin Burke 17.07.2013 / 01:33

1 resposta

13

Em suma, compatibilidade.

O formato que o crontab usa é descrito em detalhes minuciosos como parte da Especificação POSIX . As distribuições Linux geralmente não são 100% totalmente compatíveis com as especificações POSIX, mas elas são geralmente muito próximas, já que a maioria das coisas na especificação POSIX são partes de uma máquina parecida com Unix que os desenvolvedores tomam como garantido como existente. No que diz respeito a Cron, a Base Padrão do Linux especifica diretamente que isso deve se comportar de acordo com o POSIX .

Certamente, distros individuais podem optar por modificar o Cron que usam, mas Adicionar granularidade de segundo nível exigiria outro campo, tornando o novo crontab efetivamente completamente incompatível com praticamente tudo que usa o Cron.

Mas, ressaltar que isso é para compatibilidade, não nos dá nenhuma ideia de por que ele é granular apenas no nível do minuto. Então, por que o Cron sempre usou a granularidade de nível mínimo?

Bem, eu não estava exatamente lá (nem mesmo nascido na época), mas suspeito que seja devido a forma como Cron foi implementado pela primeira vez .

The cron in Version 7 Unix, written by Brian Kernighan, was a system service (later called daemons) invoked from /etc/inittab when the operating system entered multi-user mode. Its algorithm was straightforward:

1.Read /usr/etc/crontab

2.Determine if any commands must run at the current date and time, and if so, run them as the superuser, root.

3.Sleep for one minute

4.Repeat from step 1.

Uma implementação do Cron baseada em um ciclo de sono quase certamente se desmoronaria miseravelmente com granularidade mais fina do que um minuto; como é, o Cron teve que ser reescrito para usar métodos mais eficientes para poder lidar com cargas da ordem de 100 usuários. A granularidade de um segundo seria ainda pior do que isso em apenas dois usuários.

Portanto, como o programa inicialmente não pôde manipulá-lo e porque o formato continuou, e como a alteração seria uma grande compatibilidade, é muito provável que o cron nunca ofereça suporte à granularidade de subminute. Especialmente porque, como MichaelT apontou nos comentários, uso de comandos de suspensão pode criar facilmente o comportamento desejado , sem a necessidade de alterações no próprio Cron.

    
por 17.07.2013 / 04:24

Tags