Como funcionam as partes internas do daemon do cron?

6

Eu quero saber como cron funciona internamente. O processo continua verificando a hora atual em um loop while infinito (consumindo assim continuamente os ciclos da CPU)? Ou alguma função gera uma interrupção e notifica o daemon cron ?

    
por avi 08.02.2013 / 18:27

2 respostas

7

Eu li uma vez o código-fonte do vixie-cron e tive que ser hospitalizado. No entanto, se você está procurando "alguma função gerar uma interrupção" de cada vez no futuro, você deve investigar o alarm(2) syscall. Ele pede ao kernel que lhe envie o sinal SIGALRM em um horário agendado, que você pode capturar. Nesse meio tempo, seu processo pode fazer outra coisa, ou sleep() , como eu fiz no hospital.

    
por 09.02.2013 / 13:56
6

Tenho certeza que existem muitas variações, o modo como funciona em dcron (também conhecido como o daemon do cronômetro de Dillon) é que ele dorme por até 60 segundos por vez, ele tenta sincronizar isso dormir menos, se necessário, de modo a acordar aos 00 segundos de cada minuto.

Ele usa sleep() , o que coloca o processo em suspensão (a menos que ocorra um sinal) sem usar a CPU. Quando ele acorda, ele verifica um arquivo cron.update (criado por crontab editing). Ele recria sua fila de execução, se necessário, executa as tarefas esperadas e dorme novamente.

Pelo menos um daemon do cron ( fcrond ) usa um sinal enviado pela edição do crontab para o daemon do cron em vez de uma abordagem de suspensão / verificação.

Eu nunca vi uma crond que execute as coisas com mais freqüência do que uma vez por minuto, então elas geralmente são muito leves em recursos.

No Linux, se você olhar em /proc em coisas como bytes lidos / escritos ou iowait para crond você pode ver que tem um uso relativamente alto, isso porque ele acaba contabilizando todos os processos filhos que ele começa, por exemplo no CentOS 5.x:

# grep "^[rw]" /proc/'pgrep crond'/io
rchar: 153463658151
wchar: 91095820045
read_bytes: 44480745472
write_bytes: 2261389312

(graças a atualizações de pacotes agendadas e tarefas ASLR / pré-link neste caso)

Veja também o link .

    
por 08.02.2013 / 19:01

Tags