Saya telah mengatur bangun ACPI sehingga laptop saya bangun pada waktu tertentu setiap pagi. Zona untuk ini adalah UTC. Saya ingin mengatur crontab saya juga menggunakan UTC sehingga cocok dengan alarm bangun.
Bagaimana Anda melakukannya?
Saya sudah mencoba mengedit /etc/default/cron
untuk memasukkan:
TZ="UTC"
tetapi tidak berhasil. (Saya juga sudah mencoba TZ=UTC
dan TZ="UTC/GMT"
)
Ada ide?
sudo service cron restart
setelah mengedit?Jawaban:
Saya memiliki masalah serupa pada Trusty (14.04). Mengatasinya dengan mengatur zona waktu mesin kemudian memulai kembali
cron
layanansudo dpkg-reconfigure tzdata
- ikuti instruksi untuk memilih Wilayah / Negarasudo service cron restart
timedatectl
- Verifikasi pengaturan tanggal Andasumber
date
di baris perintah untuk mengonfirmasi bahwa tanggal sudah benar sesuai harapan Anda.Tidak ada cara mudah untuk mencapai ini. cron menggunakan waktu setempat.
/etc/default/cron
danTZ
spesifikasi lain dalam crontab hanya menentukan apa yangTZ
harus digunakan untuk proses yang dimulai oleh cron, itu tidak mempengaruhi waktu mulai.Sebagian besar solusi yang saya lihat melibatkan sebuah utilitas di tengah, jadi cron akan memulai sesuatu yang kemudian akan menentukan kapan untuk memulai di UTC (mis. Jika Anda tahu Anda hanya khawatir tentang perubahan DST, mulai saja 2 jam sebelumnya, hitung perbedaan waktu, dan mulai saja. Coba lihat
at
. Untuk melakukannya, orang sering menggunakanperl
ataupython
atau bahasa skrip serupa).Ada cara jahat untuk meretasnya jika Anda mau. cron hanya membaca info TZ dari sistem saat startup. Jadi jika ini adalah server yang terus berjalan, Anda bisa mengatur TZ ke UTC, reboot, dan setelah boot atur ke zona waktu lokal Anda. Anda juga bisa membuat skrip ini.
Sebagai pendekatan alternatif, lihat juga
@reboot
sintaks cron, yang harus menjalankan skrip setelah boot, yang terdengar seperti apa yang Anda inginkan.sumber
Ada file yang mengontrol zona waktu sistem .. Saya baru saja mendapatkan masalah yang sama, berikut solusinya:
Jika Anda belum mengonfigurasi zona waktu secara manual, menjalankan
date
harus menampilkan waktu UTC.buat cadangan
hapus file:
Saya tinggal di Chicago, (Anda mungkin perlu mengubah jalur, menggunakan bantuan tombol tab) jadi:
Kemudian reboot. Ketika startup sistem Anda melakukan: date
sekarang zona waktu Anda seharusnya ada di sana sekarang, dan cron akan melihat ini.
FYI: mengatur variabel TZ adalah solusi sementara, dan terkadang bertindak sebagai "topeng".
sumber
date
bekerja tanpa me-reboot, dan bar restart OSsudo service crond restart
sudah cukup untuk memperbaiki waktu pekerjaan cron saya.Pada Maret 2017, saya menemukan bahwa crond mendukung variabel CRON_TZ di setiap crontab.
- kutipan dari halaman manual crontab (5)
Ini memungkinkan saya untuk menentukan waktu untuk mengeksekusi setiap cronjob dalam waktu lokal, yang secara otomatis dicatat untuk DST, sementara server tetap dalam UTC.
sumber
ls /usr/share/zoneinfo/America
untuk melihat opsi.OK, saya mengambil waktu dan mencari cara untuk melakukan ini di Ubuntu Natty, dan inilah cara saya membuatnya bekerja. Mungkin ada cara yang lebih elegan, tetapi cara ini berhasil.
Pertama, kita perlu membungkus cron yang dapat dieksekusi dalam sebuah shell yang menetapkan variabel TZ. Begini caranya:
Kemudian, buat file / usr / sbin / cron baru. Saya menggunakan vim, tetapi Anda dapat menggunakan editor yang Anda inginkan, cukup buat file seperti ini:
Jadikan file cron baru dapat dieksekusi:
Sekarang, restart daemon cron:
Pekerjaan cron Anda sekarang akan berjalan pada jadwal berbasis UTC - NAMUN, meskipun waktu mereka dieksekusi akan UTC, ketika mereka menjalankan mereka akan memiliki zona waktu yang ditetapkan untuk apa pun yang ditentukan untuk sistem. Untuk mengubahnya, letakkan ini di crontab Anda sebelum perintah apa pun:
Jadi crontab Anda akan terlihat seperti ini:
sumber
Lihat
/etc/default/cron
. Anda dapat mengatur diTZ
sini untuk -all- crontab dan harusTZ=UTC
iirc. Jadi metode Anda seharusnya berhasil.Lihatlah fcron . Anda dapat mengatur masing-masing crontab di zona waktu yang berbeda:
timezone-name 'time zone of the system'
Jalankan pekerjaan di zona waktu yang diberikan. timezone-name adalah string yang valid untuk variabel lingkungan TZ: lihat dokumentasi sistem Anda untuk lebih jelasnya. Misalnya, "Eropa / Paris" berlaku pada sistem Linux. Opsi ini menangani perubahan waktu musim panas dengan benar. Variabel lingkungan TZ diatur ke nilai zona waktu saat pekerjaan yang menentukan opsi ini dijalankan.
Harap perhatikan bahwa jika Anda memberikan argumen nama-zona waktu yang salah, itu akan diabaikan secara diam-diam, dan pekerjaan akan berjalan di zona waktu sistem.
sumber
Silakan lihat posting saya berikutnya untuk solusi spesifik Ubuntu
Saya tahu ini adalah forum Ubuntu, tetapi saya yakin jawabannya akan sangat mirip dengan bagaimana Anda akan melakukan ini pada sistem Red Hat. Saya tidak memiliki sistem Ubuntu yang berguna untuk menguji ini, tetapi saya mengujinya di Red Hat.
Yang perlu Anda lakukan adalah menambahkan baris ke skrip daemon init cron Anda. Tetapkan dan ekspor variabel lingkungan TZ, seperti ini:
Kemudian restart cron daemon Anda. Pastikan Anda meletakkan ekspor ini di skrip daemon cron start SETELAH setiap pengaturan variabel dan sumber - saya pikir ini mungkin mengapa edit poster asli
/etc/default/cron
skrip tidak bekerja untuknya. Mungkin dia mengaturnya, tetapi kemudian diatur ulang oleh sesuatu yang lain lebih jauh di skrip.Perhatikan bahwa ini hanya akan memengaruhi daemon cron itu sendiri, dan bukan pekerjaan yang Anda jalankan melalui cron, jadi jika Anda ingin pekerjaan cron menggunakan UTC sebagai zona waktunya, Anda juga harus mengaturnya dalam pekerjaan itu sendiri.
Anda mungkin tidak dapat menyalin kata demi kata ini dan membuatnya berfungsi pada kotak Ubuntu, tetapi inilah skrip init yang saya gunakan untuk mengujinya di Red Hat. Anda akan menemukan ekspor tepat sebelum
start()
fungsi:sumber
Baru tahu ini di Ubuntu 14/16. Bekerja dengan sempurna untuk saya.
Langkah-langkah (sudo tersirat):
sumber
Bagaimana dengan mengevaluasi waktu utc dalam skrip shell? Jadwalkan skrip shell untuk dijalankan setiap jam. Di bagian atas skrip, dapatkan jam UTC dari perintah tanggal. Jika bukan jam UTC yang Anda inginkan, keluarlah.
Script ini akan keluar jika tidak 1AM utc.
sumber
Anda dapat mengatur variabel lingkungan CRON_TZ Jika pekerjaan cron dijalankan pada server jarak jauh, Anda mungkin harus memperhatikan bahwa shell yang digunakan oleh crontab adalah sh . Anda dapat mengecek / etc / crontab .
sumber