bagaimana menjalankan pekerjaan cron pada GMT bukan waktu setempat?


8

Bagaimana saya bisa membuat pekerjaan cron berjalan pada GMT, bukan waktu setempat?

ini file crontab saya:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

pekerjaan saya tampaknya berjalan pada waktu setempat (GMT + 11) Saya menjalankan os x snow leopard, tetapi akan memindahkan kode ke linux saat pengembangan selesai.

Lingkungan linux mungkin merupakan lingkungan bersama di mana saya mungkin memiliki sedikit kontrol atas konfigurasi.



Jawaban:


8

Tidak semua versi crondukungan menjalankan pekerjaan menggunakan zona waktu selain dari sistem.

Jika Anda memilikinya, kemungkinan spesifikasi harus TZ=GMTatau TZ=UTC(tanpa kurung sudut). Dalam beberapa kasus, variabelnya adalah CRON_TZ.

Hal terbaik untuk dilakukan adalah memeriksa dokumentasi khusus untuk sistem tertentu. Lihat man 5 crontab.


3

Jika waktu lokal Anda Europe/London. Kemudian:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<

Contoh lain:

Jika waktu reguler Anda +0500berubah UTC, dan waktu musiman Anda +0600berubah UTC. Kemudian tambahkan +5ke semua jam yang ditentukan dalam contoh di atas. Ini berarti dijalankan pada 08:15amdan 09:15amdari waktu setempat Anda masing-masing. Jadi baris cron Anda yang dimodifikasi akan terlihat seperti ini:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<

[EDIT] Pastikan untuk \menghindari persentase %karakter dalam file crontab Anda. Ketika crontab mengartikan mereka sebagai pemisah baris baru. misalnya %-> \%.


1
akan ada masalah jika Anda berada di zona waktu yang menggunakan DST sehingga (misalnya) zona waktu Anda kadang-kadang +01: 00 dan kadang-kadang +02: 00
inemanja

2
Mungkin Anda bisa menguraikan? Saya kira tidak. Kami sudah memperhitungkan DST. Setiap kasing memiliki cron line sendiri. 1 untuk masing-masing dengan / tanpa DST.
Dreamcat4

ini harus menjadi jawaban yang diterima, karena memungkinkan untuk perintah individu perilaku yang berbeda
Patrick McCann 3-15

0

Anda mungkin bisa membungkus biner crond asli.

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}

halo hlovdal, bisa tolong jelaskan langkah-langkah ini?
mata majemuk

Apakah Anda menyalin crond ke crond.real, lalu mengganti crond dengan skrip pendek, di mana Anda mengatur dan mengekspor TZ, kemudian jalankan crond.real?
mata majemuk

Bukan menyalin tetapi bergerak, tapi ya sisa analisis Anda benar.
hlovdal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.