Một thay thế cron xử lý nhiều múi giờ


8

Tôi đang tìm kiếm một sự thay thế cron (hoặc một phương thức trong cron nếu có thể) có thể cho phép lập lịch công việc trong bất kỳ số múi giờ nào (cụ thể là nhiều hơn một cho mỗi người dùng / tệp). Những gì tôi muốn là khả năng chỉ định múi giờ cho mỗi công việc (hoặc dòng cron), và sau đó chỉ xác định thời gian trong các múi giờ địa phương. Tôi nhận thấy rằng tôi có thể thay đổi toàn bộ cron múi giờ chạy, nhưng vào cuối ngày nó chỉ có thể chạy trong một múi giờ.

Giải pháp hiện tại của tôi là chuyển đổi tất cả thời gian của mình sang GMT và điều hành công việc phù hợp, vấn đề duy nhất là trong những tuần chuyển đổi tiết kiệm ánh sáng ban ngày, nhiều chỉnh sửa thủ công phải được thực hiện để đảm bảo mọi thứ chạy chính xác theo múi giờ địa phương tương ứng (ví dụ như một số các khu vực không tuân theo tiết kiệm ánh sáng ban ngày hoặc chúng không thay đổi vào cùng một ngày).

Bất kỳ suy nghĩ về điều này?

Câu trả lời:


3

Tôi nghĩ rằng bạn đang cố gắng có cả hai cách và thực tế là bạn không thể. Ví dụ: nếu bạn muốn một công việc chạy vào lúc 8 giờ sáng giờ địa phương, bất kể việc tiết kiệm ánh sáng ban ngày có hoạt động hay không thì bạn sẽ chạy hệ thống của mình (và cron) theo giờ địa phương và không thực hiện các chỉnh sửa theo mùa hoặc bạn chạy nó trong UTC ( không GMT) và thực hiện chỉnh sửa theo mùa. Nếu bạn muốn công việc của bạn để chạy theo UTC cùng, không phân biệt , sau đó bạn chạy cron theo UTC và không có gì hơn để làm cả.

Nếu những gì bạn muốn là người dùng có thể lên lịch cho một công việc định kỳ theo múi giờ địa phương của anh ta và anh ta không phải suy nghĩ về chuyển đổi để thuận tiện thì bạn hãy viết một kịch bản chuyển đổi chấp nhận thông số cron và múi giờ sau đó thực hiện chuyển đổi sang UTC đằng sau hậu trường và chỉnh sửa crontab cho anh ta. Nó thậm chí có thể là một chuyển đổi hai chiều để xử lý các thay đổi đối với các mục hiện có.

Sẽ rất hữu ích nếu bạn cho chúng tôi biết những gì bạn đang thực sự đạt được .


6

fcron hỗ trợ tính năng này.

Từ tài liệu của tùy chọn "múi giờ" trong fcrontab (5) :

Chạy công việc trong múi giờ nhất định. Tên múi giờ là một chuỗi hợp lệ cho biến môi trường TZ: xem tài liệu của hệ thống của bạn để biết thêm chi tiết. Ví dụ: "Châu Âu / Paris" hợp lệ trên hệ thống Linux. Tùy chọn này xử lý thay đổi thời gian tiết kiệm ánh sáng ban ngày một cách chính xác. Biến môi trường TZ được đặt thành giá trị của múi giờ khi một công việc xác định tùy chọn này được chạy.


fcrondường như khá cũ và nó không được cài đặt mặc định ubuntu. Còn có những giải pháp nào nữa ko?
silgon

Có vẻ như fcron đã bị xóa khỏi Debian vào năm 2011 do bị "hỏng và lỗi thời" :(
Peter Green

3

Bạn có thể viết cho mình một trình bao bọc nhỏ có ba đối số:

  • Giờ múi giờ mục tiêu phù hợp
  • Múi giờ mục tiêu
  • Lệnh chạy nếu giờ mục tiêu tz khớp với giờ hiện tại (trong mục tiêu tz).

Sau đó, chỉ cần đặt dòng bao bọc đó trong crontab của bạn để chạy hàng giờ:

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

Phiên bản python đơn giản:

#!/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)

0

Tôi khuyên bạn nên sử dụng Giờ phối hợp quốc tế (UTC), nó không bị ảnh hưởng bởi tiết kiệm ánh sáng ban ngày. Xem câu trả lời cho "chuyển đổi thời gian mùa đông và mùa hè mà không nghỉ ngơi trong dòng thời gian." . Đây là những gì thường là tốt nhất cho thời gian hệ thống là tốt.


Tôi cho rằng tôi đã không làm cho câu hỏi của mình đủ rõ ràng ... Vấn đề của tôi là tôi cần việc làm để chạy vào lúc 8 giờ sáng giờ địa phương trong một khu vực (nói Nam Phi / Johannesburg). Khi tiết kiệm ánh sáng ban ngày xảy ra, phần bù UTC sẽ kết thúc thay đổi thành tài khoản cho giờ địa phương mới và sẽ yêu cầu chỉnh sửa thủ công để giải thích cho điều đó. Điều đó có ý nghĩa hay tôi đang thiếu một cái gì đó ở đây?
mgray

Xem những gì Dennis nói, anh ấy đã đúng :-)
Kyle Brandt


-1

Cfengine là cách chúng tôi làm điều này. Bạn có thể thiết lập công việc bằng giờ địa phương (điều này phù hợp với tiết kiệm ánh sáng ban ngày) hoặc GMT cho các công việc đồng thời. Bạn có thể tạo bất kỳ loại lịch tùy chỉnh, ngoại trừ. Tôi biết bạn có thể trả rất nhiều tiền cho việc lập lịch trình phần mềm nhưng chúng tôi không bao giờ cần bất cứ điều gì hơn thế này, ngay cả với các trung tâm dữ liệu ở 3 địa điểm trên khắp thế giới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.