Masalah zona waktu dengan cron

11

Pekerjaan cron saya dihitung satu jam kemudian dibandingkan dengan waktu server. Saya tidak mengerti apa yang sedang terjadi.

Konfigurasi saya adalah sebagai berikut:

Waktu server :

Europe/Paris

Di / etc / default / cron saya menambahkan baris berikut:

TZ="Europe/Paris"

Meskipun demikian, pekerjaan cron diluncurkan satu jam lebih lambat dari waktu server. Apa yang benar-benar rumit, adalah bahwa jika saya meminta cron untuk memainkan instruksi "date", itu memberikan tanggal server (yang bagus!).

Saya tidak tahu bagaimana menyelesaikan masalah ini; Saya sudah membaca di forum, tetapi tidak menemukan yang menarik.

Bagaimana menurut anda ?

Guillaume Lebourgeois
sumber
4
Jadi pekerjaan cron dijadwalkan di UTC. Halaman manual cron Vixie mengatakan, "Daemon akan menggunakan, jika ada, definisi dari / etc / timezone untuk zona waktu." Apa yang ada di dalam /etc/timezone? Sudahkah Anda memodifikasi /etc/timezonelebih baru daripada cronprosesnya dimulai? Sudahkah Anda mencoba /etc/init.d/cron restart?
Keith Thompson
3
/ etc / timezone telah dimodifikasi baru-baru ini, tanpa memulai ulang /etc/init.d/cron. Saya akan mencoba untuk me-restart itu.
Guillaume Lebourgeois

Jawaban:

16

(Menyalin komentar saya sebagai jawaban, karena ternyata itu solusinya; saya kira benar.)

Jadi pekerjaan cron dijadwalkan dalam UTC ( Europe/Parisberada pada offset satu jam dari UTC).

Halaman manual cron Vixie mengatakan:

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

Apa yang ada di dalam /etc/timezone? Sudahkah Anda memodifikasi /etc/timezonelebih baru daripada proses cron dimulai? Sudahkah Anda mencoba

/etc/init.d/cron restart

?

Keith Thompson
sumber
3

Beberapa distro seperti Fedora menyediakan mekanisme di mana Anda dapat mengatur CRON_TZ=untuk mengganti zona waktu default Anda.

Dari Fedora man 5 crontab

Variabel CRON_TZ menentukan zona waktu khusus untuk tabel cron. Pengguna harus memasukkan waktu sesuai dengan zona waktu yang ditentukan ke dalam tabel. Waktu yang digunakan untuk menulis ke file log diambil dari zona waktu lokal, tempat daemon berjalan.

Sesuatu seperti ini:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash
slm
sumber
1

Wikipedia mengatakan

Kebanyakan implementasi cron hanya menginterpretasikan entri crontab dalam pengaturan zona waktu sistem di mana daemon cron itu sendiri dijalankan. Ini bisa menjadi sumber perselisihan jika mesin multiuser besar memiliki pengguna di beberapa zona waktu, terutama jika zona waktu default sistem menyertakan DST yang berpotensi membingungkan. Dengan demikian, implementasi cron dapat membuat huruf khusus untuk setiap "TZ =" garis pengaturan variabel lingkungan di crontab pengguna, menafsirkan entri crontab berikutnya relatif terhadap zona waktu itu

Jadi mungkin ID login Anda memiliki pengaturan TZ yang berbeda dari pengaturan TZ sistem?

RedGrittyBrick
sumber
1

Restart cron adalah apa yang saya butuhkan tetapi bagi saya perintahnya adalah

/etc/init.d/crond restart (crond not cron)
arx-e
sumber
0

Baru tahu ini di Ubuntu 14/16. Bekerja dengan sempurna untuk saya.

Langkah-langkah (sudo tersirat):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone
Varun Chandak
sumber
Di mana cronmemulai kembali?
DavidPostill
Saya tidak perlu memulai ulang cron.
Varun Chandak