Pekerjaan Cron tidak menyala setelah perubahan zona waktu

13

Saya sudah mencoba menghilangkan banyak kesalahan umum,

  1. memastikan bahwa PATH tersedia untuk cron

  2. ada endline di akhir file crontab

  3. zona waktu diatur oleh:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

Berjalan datedi bash, saya mendapatkan:

Tue Sep 17 15:14:30 SGT 2013

Untuk memeriksa apakah cron menggunakan waktu yang sama,

* * * * * date >> date.txt

memberikan output tanggal yang sama di date.txt.

Ini adalah skrip yang saya coba jalankan:

event.sh:

#!/usr/bin/env bash
echo data > /root/data.txt

Menggunakan crontab -e, garis di bawah ini berfungsi,

* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

Namun, ketika saya mencoba beberapa argumen lain, berharap itu akan berjalan pada jam 18:00:

50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

atau

50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)

itu tidak akan berfungsi lagi. Sepertinya ada masalah dengan argumen jam saya. Tidak ada yang dapat ditemukan dalam /tmp/debug.logfile.

LARUTAN:

Ternyata saya harus me-restart layanan cron setelah melakukan perubahan pada TZ.

adsisco
sumber
1
ada kesalahan dalam log? dapatkah Anda mencoba dengan jalur absolut alih-alih ~/event.shcoba/home/username/event.sh
Rahul Patil
1
juga melakukan modifikasi kecil seperti* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Rahul Patil
1
Anda mengatakan bahwa zona waktu diatur dengan benar, tetapi apakah Anda benar-benar yakin akan hal itu? Coba tambahkan entri seperti * * * * * datedan konfirmasi yang datemenunjukkan waktu yang diharapkan. Perhatikan bahwa pengaturan variabel lingkungan TZ dari dalam crontab mungkin tidak mempengaruhi zona waktu seperti yang digunakan oleh daemon cron itu sendiri, tetapi itu akan mempengaruhi proses yang diluncurkan melalui cron, jadi jika Anda mengatur TZ di crontab Anda, saya sarankan berkomentar sementara dan mengatur waktu menggunakan zona waktu jam sistem (mungkin UTC jika Anda mem-boot-tunggal Linux, tetapi mungkin waktu lokal) sebagai gantinya.
CVn
1
Anda tidak mengerti intinya, @adsisco. Saya meminta Anda menghapus arahan TZ yang mungkin ada di crontab dan kemudian coba lagi. Itu akan membuat tanggal dieksekusi dengan TZ yang sama dengan daemon cron itu sendiri, membiarkan kami melihat zona waktu cron mana yang menginginkan bidang waktu. / Etc / localtime hanya memengaruhi tampilan, bukan jam sistem, dan saya ragu itu mempengaruhi cron. Dengan melakukan tes ini, kami dapat memastikan bahwa masalah Anda sama sekali tidak terkait dengan zona waktu (yang sepertinya bagi saya).
CVn
1
sebenarnya, saya pikir saya baru saja memperbaikinya dengan me-reboot sistem ... mungkinkah saya harus me-restart layanan cron setelah melakukan perubahan pada TZ? @ MichaelKjörling. TERIMA KASIH! untuk mengarahkan saya ke kemungkinan masalah zona waktu.
adsisco

Jawaban:

7

Pertama, kemungkinan Anda menabrak bug yang menyebabkan salah satu bidang dianggap salah tampaknya sangat rendah. Ini lebih cenderung menjadi kesalahpahaman tentang apa yang terjadi dan apa yang diharapkan cron.

Dalam hal ini, kami menemukan dalam komentar atas pertanyaan bahwa itu sangat mungkin masalah terkait zona waktu. Untuk ini, Anda akan:

  • Tambahkan entri suka * * * * * dateke crontab
  • Hapus (atau beri komentar) tugas TZ dari crontab

Ini memaksa dateuntuk menjalankan dengan pengaturan zona waktu penyerang, yang berarti daemon cron . Lihatlah outputnya; itu akan menunjukkan apa zona waktu cron menggunakan secara internal, dan dengan demikian sangat mungkin zona waktu mana ia ingin bidang waktunya. Jika Anda memiliki tugas TZ di crontab, sangat mungkin bahwa tugas variabel lingkungan TZ dilewatkan ke menjalankan perintah tetapi cron sendiri menggunakan beberapa zona waktu lainnya . Dengan mengomentari atau menghapus tugas TZ, Anda menghindari ambiguitas ini.

Juga perhatikan bahwa setiap perubahan pada pengaturan zona waktu global sistem (termasuk misalnya / etc / localtime) hampir pasti memerlukan setidaknya restart daemon cron, dan mungkin (walaupun tidak mungkin) sistem reboot untuk mengambil efek penuh. Mengedit tugas TZ di crontab seharusnya tidak memerlukan reload daemon cron, karena harus mendeteksi bahwa file telah diubah dan memuatnya secara otomatis.

sebuah CVn
sumber