Vấn đề múi giờ với cron


11

Công việc định kỳ của tôi được tính một giờ sau so với thời gian máy chủ. Tôi không hiểu chuyện gì đang xảy ra.

Cấu hình của tôi là như sau:

Thời gian máy chủ:

Europe/Paris

Trong / etc / default / cron Tôi đã thêm dòng sau:

TZ="Europe/Paris"

Mặc dù vậy, công việc định kỳ được khởi chạy muộn hơn một giờ so với thời gian của máy chủ. Điều thực sự khó khăn, là nếu tôi yêu cầu cron chơi hướng dẫn "ngày", nó sẽ đưa ra ngày máy chủ (một ngày tốt!).

Tôi không biết làm thế nào để giải quyết vấn đề này; Tôi đã đọc một số bài trên các diễn đàn, nhưng không thấy có gì thú vị.

Bạn nghĩ sao ?


4
Vì vậy, công việc cron đang được lên kế hoạch trong UTC. Trang cron man của Vixie nói: "Trình nền sẽ sử dụng, nếu có, định nghĩa từ / etc / múi giờ cho múi giờ." Có gì trong /etc/timezone? Bạn đã sửa đổi /etc/timezonegần đây hơn cronquá trình đã được bắt đầu? Bạn đã thử /etc/init.d/cron restartchưa
Keith Thompson

3
/ etc / múi giờ đã được sửa đổi gần đây, mà không cần khởi động lại /etc/init.d/cron. Tôi sẽ cố gắng khởi động lại nó.
Guillaume Lebourgeois

Câu trả lời:


16

(Sao chép nhận xét của tôi dưới dạng câu trả lời, vì hóa ra đó là giải pháp; tôi đoán đúng.)

Vì vậy, các công việc định kỳ đang được lên lịch trong UTC ( Europe/Parisở mức bù một giờ so với UTC).

Trang cron của Vixie nói:

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

Có gì trong /etc/timezone? Bạn đã sửa đổi /etc/timezonegần đây hơn quá trình cron đã được bắt đầu? Bạn đã thử chưa

/etc/init.d/cron restart

?


3

Một số phân phối như Fedora cung cấp một cơ chế trong đó bạn có thể đặt CRON_TZ=để ghi đè múi giờ mặc định của mình.

Từ Fedora man 5 crontab

Biến CRON_TZ chỉ định múi giờ cụ thể cho bảng cron. Người dùng nên nhập thời gian theo múi giờ đã chỉ định vào bảng. Thời gian được sử dụng để ghi vào tệp nhật ký được lấy từ múi giờ địa phương, nơi trình nền đang chạy.

Một cái gì đó như thế này:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash

1

Wikipedia nói

Hầu hết các cài đặt cron chỉ đơn giản diễn giải các mục crontab trong cài đặt múi giờ hệ thống, theo đó bản thân cron daemon được chạy. Đây có thể là nguồn tranh chấp nếu một máy nhiều người dùng lớn có người dùng ở một số múi giờ, đặc biệt nếu múi giờ mặc định của hệ thống bao gồm DST có thể gây nhầm lẫn. Do đó, việc triển khai cron có thể đặc biệt bất kỳ dòng cài đặt biến môi trường "TZ =" nào trong crontabs của người dùng, diễn giải các mục crontab tiếp theo liên quan đến múi giờ đó

Vậy có lẽ ID đăng nhập của bạn có cài đặt TZ khác với cài đặt TZ của hệ thống?


1

Khởi động lại cron là những gì tôi cần nhưng đối với tôi lệnh là

/etc/init.d/crond restart (crond not cron)

0

Chỉ cần tìm ra điều này trên Ubuntu 14/16. Làm việc hoàn hảo cho tôi.

Các bước (sudo ngụ ý):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone

Trường hợp nào cronđược khởi động lại?
DavidPostill

Tôi không cần phải khởi động lại cron.
Varun Chandak
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.