Penggantian cron yang menangani beberapa zona waktu

8

Saya mencari pengganti cron (atau metode dalam cron jika memungkinkan) yang dapat memungkinkan untuk penjadwalan pekerjaan di sejumlah zona waktu (khususnya lebih dari satu per pengguna / file). Yang saya inginkan adalah kemampuan untuk menentukan zona waktu per pekerjaan (atau garis cron), dan kemudian hanya menentukan waktu di zona waktu lokal. Saya perhatikan bahwa saya dapat mengubah seluruh cron zona waktu berjalan, tetapi pada akhirnya itu hanya dapat berjalan dalam satu zona waktu.

Solusi saya saat ini adalah mengonversi semua waktu saya menjadi GMT dan menjalankan pekerjaan sesuai dengan itu, satu-satunya masalah adalah selama minggu-minggu perubahan tabungan siang hari, banyak pengeditan manual harus dilakukan untuk memastikan semuanya berjalan dengan benar di zona waktu setempat masing-masing (misalnya beberapa wilayah tidak mengikuti penghematan siang hari, atau tidak berubah pada tanggal yang sama).

Ada pemikiran tentang ini?

mgray
sumber

Jawaban:

3

Saya pikir Anda mencoba untuk mendapatkan keduanya dan kenyataannya adalah bahwa Anda tidak bisa. Jika Anda ingin pekerjaan dijalankan pada jam 8 pagi waktu setempat, misalnya, terlepas dari apakah daylight saving aktif maka Anda menjalankan sistem Anda (dan cron) di waktu setempat dan tidak melakukan pengeditan musiman atau Anda menjalankannya di UTC ( bukan GMT) dan lakukan pengeditan musiman. Jika Anda ingin pekerjaan Anda berjalan di UTC yang sama, terlepas , maka Anda menjalankan cron sesuai dengan UTC dan tidak ada lagi yang bisa dilakukan.

Jika yang Anda inginkan adalah agar pengguna dapat menjadwalkan pekerjaan cron sesuai dengan zona waktu lokalnya dan tidak membuatnya harus memikirkan konversi untuk kenyamanannya, maka Anda menulis skrip konversi yang menerima spesifikasi cron dan zona waktu kemudian apakah konversi ke UTC di belakang layar dan mengedit crontab untuknya. Bahkan dapat berupa konversi dua arah untuk menangani perubahan pada entri yang ada.

Akan sangat membantu jika Anda memberi tahu kami apa yang sebenarnya ingin Anda capai .

Dijeda sampai pemberitahuan lebih lanjut.
sumber
6

fcron mendukung fitur ini.

Dari dokumentasi opsi "zona waktu" di fcrontab (5) :

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" valid 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.

jroller
sumber
fcrontampaknya sudah cukup tua dan belum menginstal default di ubuntu. Apakah ada solusi lain?
silgon
Tampaknya fcron telah dihapus dari Debian pada 2011 karena "rusak dan ketinggalan zaman" :(
Peter Green
3

Anda bisa menulis sendiri bungkus kecil yang membutuhkan tiga argumen:

  • Targetkan zona waktu jam untuk mencocokkan
  • Zona waktu target
  • Perintah untuk dijalankan jika target tz jam cocok dengan jam saat ini (di target tz).

Kemudian cukup masukkan garis pembungkus itu di crontab Anda agar berjalan setiap jam:

python tz_wrapper.py 14 "US/Mountain" "echo 'hi'"

Versi python sederhana:

#!/usr/bin/python
import sys, os, datetime
import pytz

arg_hour = sys.argv[1]
arg_timezone = sys.argv[2]
arg_cmd = sys.argv[3]

target_tz = pytz.timezone(arg_timezone)
target_hour = pytz.utc.localize(datetime.datetime.utcnow()).astimezone(target_tz).strftime("%H")

if target_hour == str(arg_hour):
    os.system(arg_cmd)
jasonjwwilliams
sumber
0

Saya sarankan Anda menggunakan Waktu Universal Terkoordinasi (UTC), itu tidak dipengaruhi oleh penghematan siang hari. Lihat jawaban untuk "pergantian waktu musim dingin dan musim panas tanpa ada batas waktu." . Inilah yang biasanya terbaik untuk waktu sistem juga.

Kyle Brandt
sumber
Saya kira saya tidak membuat pertanyaan saya cukup jelas ... Masalah saya adalah bahwa saya memerlukan pekerjaan untuk dijalankan pada jam 8 pagi waktu setempat di suatu daerah (katakanlah Afrika Selatan / Johannesburg). Ketika penghematan siang hari terjadi, offset UTC akan berakhir berubah menjadi akun untuk waktu lokal yang baru dan akan membutuhkan pengeditan manual untuk memperhitungkannya. Apakah itu masuk akal, atau saya kehilangan sesuatu di sini?
mgray
Lihat apa yang dikatakan Dennis, dia benar :-)
Kyle Brandt
0

Ada port launchd dari darwin untuk FreeBSD yang akan melakukan semua yang Anda inginkan jika Anda menggunakan FreeBSD.

https://github.com/freebsd/openlaunchd

Dan ada jobd, yaitu untuk * BSD dan Linux.

https://github.com/mheily/jobd

lbutlr
sumber
1
Apakah mungkin untuk membagikan bagian dari konfigurasi atau tautan di mana orang dapat dapat melihat cara mengkonfigurasi zona waktu untuk pekerjaan yang diberikan?
silgon
-1

Cfengine adalah cara kita melakukan ini. Anda dapat mengatur pekerjaan menggunakan waktu lokal (yang beradaptasi dengan penghematan siang hari) atau GMT untuk pekerjaan simultan. Anda dapat membuat segala jenis kalender khusus, dengan pengecualian. Saya tahu Anda dapat membayar banyak uang untuk perangkat lunak penjadwalan tetapi kami tidak pernah membutuhkan lebih dari ini, bahkan dengan pusat data di 3 lokasi di seluruh dunia.

Sannukka
sumber