ปัญหาเขตเวลากับ cron


11

งาน cron ของฉันถูกคำนวณหนึ่งชั่วโมงต่อมาเมื่อเทียบกับเวลาเซิร์ฟเวอร์ ฉันไม่เข้าใจว่าเกิดอะไรขึ้น

การกำหนดค่าของฉันมีดังต่อไปนี้:

เวลาเซิร์ฟเวอร์:

Europe/Paris

ใน / etc / default / cron ฉันเพิ่มบรรทัดต่อไปนี้:

TZ="Europe/Paris"

แม้จะมีงาน cron จะเปิดตัวหนึ่งชั่วโมงหลังจากเวลาเซิร์ฟเวอร์ สิ่งที่ยุ่งยากจริงๆก็คือถ้าฉันขอให้ cron เล่นคำสั่ง "วันที่" มันให้วันเซิร์ฟเวอร์ (อันที่ดี!)

ฉันไม่รู้ว่าจะแก้ไขปัญหานี้อย่างไร ฉันอ่านฟอรัมแล้ว แต่ไม่พบสิ่งใดที่น่าสนใจ

คุณคิดอย่างไร ?


4
ดังนั้นงาน cron จะถูกกำหนดเวลาใน UTC หน้า man Vixie cron กล่าวว่า "daemon จะใช้ถ้ามีคำจำกัดความจาก / etc / timezone สำหรับเขตเวลา" มีอะไรบ้าง/etc/timezone? คุณปรับเปลี่ยน/etc/timezoneเร็วกว่าcronกระบวนการเริ่มต้นหรือไม่ คุณเคยลอง/etc/init.d/cron restartไหม
Keith Thompson

3
/ etc / timezone ได้รับการแก้ไขเมื่อเร็ว ๆ นี้โดยไม่ต้องรีสตาร์ท /etc/init.d/cron ฉันจะพยายามเริ่มต้นใหม่
Guillaume Lebourgeois

คำตอบ:


16

(คัดลอกความคิดเห็นของฉันเป็นคำตอบเนื่องจากเป็นวิธีแก้ปัญหาฉันเดาถูก)

ดังนั้นงาน cron จะถูกกำหนดเวลาใน UTC ( Europe/Parisอยู่ที่หนึ่งชั่วโมงชดเชยจาก UTC)

หน้าคน Vixie cron พูดว่า:

daemon จะใช้ถ้ามีคำจำกัดความจาก / etc / timezone สำหรับเขตเวลา

มีอะไรบ้าง/etc/timezone? คุณปรับเปลี่ยน/etc/timezoneเร็วกว่ากระบวนการ cron หรือไม่? คุณเคยลองไหม

/etc/init.d/cron restart

?


3

distros บางอย่างเช่น Fedora มีกลไกที่คุณสามารถตั้งค่าCRON_TZ=ให้แทนที่เขตเวลาเริ่มต้นของคุณ

จาก Fedora man 5 crontab

ตัวแปร CRON_TZ ระบุเขตเวลาเฉพาะสำหรับตาราง cron ผู้ใช้ควรป้อนเวลาตามโซนเวลาที่ระบุลงในตาราง เวลาที่ใช้ในการเขียนลงในล็อกไฟล์นั้นนำมาจากโซนเวลาท้องถิ่นโดยที่ daemon กำลังทำงาน

บางสิ่งเช่นนี้

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

1

Wikipedia พูดว่า

การประยุกต์ใช้ cron ส่วนใหญ่เพียงตีความรายการ crontab ในการตั้งค่าเขตเวลาของระบบภายใต้ cron daemon เองที่รันอยู่ นี่อาจเป็นแหล่งที่มาของข้อพิพาทหากเครื่องหลายผู้ใช้ขนาดใหญ่มีผู้ใช้ในหลายโซนเวลาโดยเฉพาะอย่างยิ่งหากเขตเวลาเริ่มต้นของระบบมี DST ที่อาจเกิดความสับสน ดังนั้นการนำ cron ไปใช้อาจตั้งค่าตัวแปรสภาวะแวดล้อม "TZ =" ใด ๆ ที่เป็นบรรทัดใน crontabs ของผู้ใช้ซึ่งแปลรายการ crontab ที่ตามมาสัมพันธ์กับเขตเวลานั้น

ดังนั้นรหัสล็อกอินของคุณอาจมีการตั้งค่า TZ ซึ่งแตกต่างจากการตั้งค่าระบบ TZ ใช่หรือไม่


1

การรีสตาร์ท cron เป็นสิ่งที่ฉันต้องการ แต่สำหรับฉันคำสั่งคือ

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

0

เพิ่งพบสิ่งนี้บน Ubuntu 14/16 ทำงานอย่างสมบูรณ์แบบสำหรับฉัน

ขั้นตอน (sudo โดยนัย):

  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

ในกรณีที่ไม่cronได้รับการเริ่มต้นใหม่?
DavidPostill

ฉันไม่จำเป็นต้องรีสตาร์ท cron
Varun Chandak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.