Ubah zona waktu cronjob

10

Saya memiliki cronjob yang dijalankan setiap hari pada jam 9:00 UTC-Time. Saya dalam GMT + 1 sehingga dieksekusi pada 10:00 waktu setempat. Ketika ada perubahan zona waktu (ke daylight saving time, DST), cronjob mengeksekusi masih pada pukul 9:00 waktu UTC-Waktu tetapi pukul 11:00 waktu setempat. Tapi saya ingin selalu mengeksekusi pada 10:00, tidak peduli musim panas atau tidak. Bagaimana aku melakukan itu?

qailburn
sumber
4
Pertanyaan ini diposkan silang di StackOverflow: stackoverflow.com/questions/29592533/…
John1024
Apa yang diatur zona waktu Anda di / etc / timezone?
Twinkles

Jawaban:

2

Periksa pengaturan Anda di / etc / zona waktu. Dalam pertanyaan yang Anda sebutkan bahwa Anda berada di "GMT + 1", jika itu adalah zona waktu Anda, skrip Anda akan selalu dieksekusi di UTC ditambah satu jam. Jika Anda mengaturnya ke misalnya "Eropa / Paris", waktu eksekusi akan berubah dengan waktu musim panas.

Twinkles
sumber
6

Ini kemungkinan akan tergantung pada OS Anda dan penerapannya cron. Ini tidak mungkin dalam implementasi cron paling populer vixie/isc cron,. Dari 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.
jordanm
sumber
2

Memperluas jawaban @Cyrus inilah yang saya lakukan:

Saya membuat skrip yang memeriksa offset UTC:

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

Lalu saya menambahkan dua entri crontab masing-masing untuk offset yang saya inginkan:

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

Dari halaman manual:

Daemon akan menggunakan, jika ada, definisi dari /etc/timezone untuk zona waktu.

Lingkungan dapat didefinisikan ulang dalam definisi crontab pengguna tetapi cron hanya akan menangani tugas dalam satu zona waktu.

abligh
sumber
1

Pindahkan cronjob Anda ke 8:00 dan tidur satu jam jika Anda berada di GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
Cyrus
sumber
Bagaimana jika TZ Anda adalah Amerika Utara?
swdev