Há alguma coisa no crontab unix para determinar que isso deve ser executado no horário padrão PST / CST?

2

Existe essa coisa no QuartzScheduler, onde podemos dizer executar isso em CST / BST / ou qualquer fuso horário. Isso também é bom quando você deseja executar alguns trabalhos em determinados fusos horários e determinados trabalhos em outros fusos horários.

Existe algo assim em crontab, onde podemos especificar o fuso horário, porque eu tenho visto pessoas enlouquecendo inúmeras vezes quando há uma mudança de fuso horário e eles têm que passar pela lista de empregos em crontab onde eles têm que mudar horários.

I am looking for something where we can execute certain jobs in certain timezones and certain other jobs in some other timezones.

    
por Gilles 09.03.2012 / 22:49

2 respostas

4

Isso depende da sua distribuição: algumas versões do Cron suportam isso, outras não. Por exemplo, no Debian:

LIMITATIONS
The cron daemon runs with a defined timezone. It currently does not support per-user timezones. All the tasks: system's and user's will be run based on the configured timezone. Even if a user specifies the TZ environment variable in his crontab this will affect only the commands executed in the crontab, not the execution of the crontab tasks themselves.

Considerando que no Fedora:

The CRON_TZ specifies the time zone specific for the cron table. User type into the chosen table times in the time of the specified time zone. The time into log is taken from local time zone, where is the daemon running.

Portanto, verifique a página do manual crontab ( man 5 crontab ) em seu sistema. (Ambas as passagens acima são da página man nos respectivos sistemas.)

    
por 09.03.2012 / 23:26
0

Parece que não há uma maneira universal de informar cron para agendar trabalhos em um fuso horário especificado por usuário (ou por trabalho).

Mas não deve ser difícil contornar isso. Por exemplo, se você quiser executar um trabalho todos os dias às 10h30, PST, poderá escrever um wrapper e invocá-lo 30 minutos após cada hora:

30 * * * *    wrapper ...

O wrapper pode definir internamente seu próprio fuso horário e executar o comando especificado somente se a hora atual for (próximo a) 10:30 am. Ele teria que permitir um pouco de inclinação, já que não será executado exatamente 30 minutos após a hora.

Se for suficientemente útil, eu mesmo posso escrever um tal wrapper. Estou pensando em uma sintaxe como:

cron-wrapper -tz [zone] -time [time] command args...

Ou, mais simplesmente, pode-se apenas especificar a hora como UTC e omitir a especificação de fuso horário (o que evita ter que decidir sobre uma sintaxe para especificar fusos horários).

Para ser claro, é sua exigência, por exemplo, executar um trabalho em um horário CST (Horário Padrão Central dos EUA) especificado, mesmo se você estiver no momento no CDT (Central Daylight Time), para que o trabalho seja sempre executado a cada 24 horas? Então você quer que ele seja executado às, digamos, 10:30 da manhã, meio ano e 11:30 da manhã, na outra metade do ano? (A maioria das pessoas gostaria que um trabalho fosse executado em um horário de relógio de parede consistente todos os dias - o que não é para sugerir que você deveria, mas esse é o uso que cron suporta.)

    
por 10.03.2012 / 00:27