Thay đổi múi giờ của cronjob


10

Tôi có một cronjob được thực hiện mỗi ngày vào lúc 9:00 sáng theo giờ UTC. Tôi đang ở GMT + 1 nên nó thực hiện lúc 10:00 AM giờ địa phương. Khi có sự thay đổi múi giờ (sang giờ tiết kiệm ánh sáng ban ngày, DST), cronjob vẫn thực hiện vào lúc 9:00 AM của UTC-Time nhưng vào lúc 11:00 AM theo giờ địa phương. Nhưng tôi muốn nó luôn luôn thực thi vào lúc 10:00, bất kể thời gian mùa hè hay không. Làm thế nào để làm điều đó?


4
Câu hỏi này được đăng chéo tại StackOverflow: stackoverflow.com/questions/29592533/NH
John1024

Múi giờ của bạn được đặt thành / etc / múi giờ là gì?
Twinkles

Câu trả lời:


2

Kiểm tra cài đặt của bạn trong / etc / múi giờ. Trong câu hỏi bạn đã đề cập, bạn đang ở "GMT + 1", nếu đó là múi giờ của bạn được đặt thành, tập lệnh của bạn sẽ luôn thực thi tại UTC cộng thêm một giờ. Nếu bạn đặt nó thành "Châu Âu / Paris", thời gian thực hiện sẽ thay đổi theo thời gian tiết kiệm ánh sáng ban ngày.


6

Điều này có thể sẽ phụ thuộc vào hệ điều hành của bạn và nó được thực hiện cron. Điều này là không thể trong việc thực hiện cron phổ biến nhất , vixie/isc cron. Từ crontab(5) manpage:

LIMITATIONS
       The  cron  daemon  runs with a defined timezone. It currently does not 
       support per-user timezones. All the tasks: system's and user's will 
       be run based on the configured timezone. Even if a user specifies  
       the TZ  environment  variable  in  his crontab this will affect only 
       the commands executed in the crontab, not the execution of the crontab 
       tasks themselves.

2

Mở rộng trên @Cyrus trả lời đây là những gì tôi đã làm:

Tôi đã tạo một tập lệnh kiểm tra bù UTC:

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

Sau đó, tôi thêm hai mục crontab cho mỗi phần bù tôi muốn:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here

1

Từ trang hướng dẫn:

Trình nền sẽ sử dụng, nếu có, định nghĩa từ /etc/timezonecho múi giờ.

Môi trường có thể được xác định lại trong định nghĩa crontab của người dùng nhưng cron sẽ chỉ xử lý các tác vụ trong một múi giờ duy nhất.


1

Di chuyển cronjob của bạn đến 8:00 và ngủ một giờ nếu bạn ở GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here

Nếu TZ của bạn là Bắc Mỹ thì sao?
swdev
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.