Làm thế nào để chạy các công việc định kỳ trên GMT không phải giờ địa phương?


8

Làm cách nào tôi có thể thực hiện các công việc định kỳ chạy trên GMT, không phải giờ địa phương?

đây là tập tin crontab của tôi:

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

công việc của tôi dường như đang chạy vào giờ địa phương (GMT + 11) Tôi đang chạy os x snow Leopard, nhưng sẽ chuyển mã lên linux khi quá trình phát triển hoàn tất.

Môi trường linux có thể là một môi trường dùng chung nơi tôi có thể kiểm soát cấu hình ít hơn.



Câu trả lời:


8

Không phải tất cả các phiên bản cronhỗ trợ chạy công việc sử dụng múi giờ khác với hệ thống.

Nếu là của bạn, có khả năng là thông số kỹ thuật nên TZ=GMThoặc TZ=UTC(không có dấu ngoặc nhọn). Trong một số trường hợp, biến sẽ là CRON_TZ.

Điều tốt nhất để làm là kiểm tra tài liệu cụ thể cho hệ thống cụ thể. Xem man 5 crontab.


3

Nếu giờ địa phương của bạn là Europe/London. Sau đó:

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
<<<

Một vi dụ khac:

Nếu thời gian thường xuyên của bạn là +0500thay đổi UTCvà thời gian theo mùa của bạn là +0600thay đổi UTC. Sau đó thêm +5vào tất cả các giờ được chỉ định trong ví dụ trên. Điều này có nghĩa là được chạy tại 08:15am09:15amthời gian địa phương của bạn tương ứng. Vì vậy, các dòng cron đã sửa đổi của bạn sau đó sẽ trông như thế này:

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] Đảm bảo \thoát bất kỳ phần trăm %ký tự nào trong tệp crontab của bạn. Vì crontab diễn giải họ là một người tách dòng mới. ví dụ: %> \%.


1
sẽ có vấn đề nếu bạn ở múi giờ sử dụng DST vì vậy (ví dụ) múi giờ của bạn đôi khi là +01: 00 và đôi khi +02: 00
inemanja

2
Có lẽ bạn có thể giải thích? Tôi không nghĩ vậy. Chúng tôi đã chiếm DST. Mỗi trường hợp có dòng cron riêng. 1 cho mỗi có / không có DST.
Dreamcat4

đây phải là câu trả lời được chấp nhận, vì nó cho phép các lệnh cá nhân hóa các hành vi khác nhau
Patrick McCann

0

Bạn có thể có thể bọc nhị phân crond ban đầu.

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

xin chào hlovdal, bạn có thể vui lòng giải thích các bước này?
mắt ghép

Bạn đang sao chép crond sang crond.real, sau đó thay thế crond bằng một đoạn script ngắn, trong đó bạn đặt và xuất TZ, sau đó thực thi crond.real?
mắt ghép

Không sao chép nhưng di chuyển, nhưng có phần còn lại của phân tích của bạn là chính xác.
hlovdal
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.