A resposta está nas fontes do cron (que você pode obter por apt-get source cron
),
particularmente no loop principal nas linhas 159--272 do arquivo cron.c
.
crond
dorme por um minuto, depois acorda e consulta o
tempo do sistema, comparando-o com a sua própria ideia de tempo (ou seja, a que horas
seria se nada alterasse o relógio). Baseado na diferença
entre o tempo real e o esperado, crond
tem diferentes
ações; dois deles são relevantes no seu caso:
-
O tempo avançou mais de 5 minutos, mas menos de 3 horas (DST é iniciado): o cron executa tarefas curinga programadas no tempo real, e qualquer trabalho agendado em um horário fixo entre o tempo computado e o tempo real. Fonte relevante está nas linhas 221--247:
/* * case 2: timeDiff is a medium-sized positive number, * for example because we went to DST run wildcard * jobs once, then run any fixed-time jobs that would * otherwise be skipped if we use up our minute * (possible, if there are a lot of jobs to run) go * around the loop again so that wildcard jobs have * a chance to run, and we do our housekeeping */ Debug(DSCH, ("[%d], DST begins %d minutes to go\n", getpid(), timeRunning - virtualTime)) /* run wildcard jobs for current minute */ find_jobs(timeRunning, &database, TRUE, FALSE); /* run fixed-time jobs for each minute missed */ do { if (job_runqueue()) sleep(10); virtualTime++; find_jobs(virtualTime, &database, FALSE, TRUE); set_time(); } while (virtualTime< timeRunning && clockTime == timeRunning); break;
-
O tempo passou de menos de 3 horas (o horário de verão termina): basta executar trabalhos com curinga, pule os trabalhos de cronograma fixo, pois eles já corre. Fonte relevante está nas linhas 247--258:
/* * case 3: timeDiff is a small or medium-sized * negative num, eg. because of DST ending just run * the wildcard jobs. The fixed-time jobs probably * have already run, and should not be repeated * virtual time does not change until we are caught up */ Debug(DSCH, ("[%d], DST ends %d minutes to go\n", getpid(), virtualTime - timeRunning)) find_jobs(timeRunning, &database, TRUE, FALSE); break;
Então, ao digitar DST, você não deve ter nenhum problema: seu script será executar (ou antes ou imediatamente após o salto de tempo).
Ao sair do horário de verão, há um risco de que seu trabalho (de tempo fixo) seja ignorado, se você agendar exatamente às 01:00. Minha sugestão seria para agendar a corrida ou 1 minuto antes da 1 hora, ou às 2 horas (ou depois).