Bir cronjob saat dilimini değiştirme


10

Her gün saat 9: 00'da UTC-Time'da yürütülen bir cronjob var. GMT + 1'deyim, bu yüzden yerel saatle 10: 00'da çalışıyor. Saat dilimi değişikliği olduğunda (gün ışığından yararlanma saati, DST'ye), cronjob hala UTC-Saat 9:00 AM'da, yerel saat 11:00 AM'de yürütülür. Ama yaz saati olsun ya da olmasın her zaman saat 10: 00'da çalışmasını istiyorum. Bunu nasıl yaparım?


4
Bu soru StackOverflow'ta çapraz olarak yayınlanmıştır: stackoverflow.com/questions/29592533/…
John1024

Saat diliminizde / etc / timezone olarak ne ayarlanmış?
Twinkles

Yanıtlar:


2

/ Etc / timezone içindeki ayarınızı kontrol edin. Bahsettiğiniz soruda "GMT + 1", saat diliminizin ayarlandığı buysa, komut dosyanız her zaman UTC artı bir saatte yürütülür. Örneğin "Avrupa / Paris" olarak ayarlarsanız, yürütme saati yaz saati uygulamasıyla değişecektir.


6

Bu muhtemelen işletim sisteminize ve uygulamasına bağlı olacaktır cron. Bu, en popüler cron uygulamasında mümkün değildir vixie/isc cron. Gönderen crontab(5) manpage:

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.

2

@Cyrus cevabını genişleterek yaptığım şey:

Bir UTC ofseti kontrol eden bir komut dosyası yaptım:

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

Sonra ben istiyorum ofset için iki crontab girişleri ekleyin:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here

1

Kılavuz sayfasından:

Daemon, varsa /etc/timezone, saat dilimi tanımını kullanacaktır .

Ortam, kullanıcının crontab tanımlarında yeniden tanımlanabilir, ancak cron yalnızca tek bir zaman dilimindeki görevleri işleyecektir.


1

GMjob + 1 ise cronjob 8:00 taşımak ve bir saat uyku

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here

TZ'niz Kuzey Amerika ise?
swdev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.