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.