เปลี่ยนเขตเวลาของ cronjob


10

ฉันมี cronjob ซึ่งดำเนินการทุกวันเวลา 9:00 น. เวลา UTC ฉันอยู่ใน GMT + 1 ดังนั้นจึงดำเนินการเวลา 10:00 น. ตามเวลาท้องถิ่น เมื่อมีการเปลี่ยนแปลงเขตเวลา (เป็นปรับเวลาตามฤดูกาล DST) cronjob จะยังคงดำเนินการเวลา 9:00 น. เวลา UTC แต่เวลา 11:00 น. ตามเวลาท้องถิ่น แต่ฉันต้องการให้มันทำงานในเวลา 10:00 ไม่ว่าจะเป็นฤดูร้อนหรือไม่ก็ตาม ฉันจะทำอย่างไร


4
คำถามนี้ถูกโพสต์ข้ามที่ StackOverflow: stackoverflow.com/questions/29592533/…
John1024

เขตเวลาของคุณตั้งไว้เป็นอะไรใน / etc / timezone
Twinkles

คำตอบ:


2

ตรวจสอบการตั้งค่าของคุณใน / etc / timezone ในคำถามที่คุณพูดถึงคุณอยู่ใน "GMT + 1" ถ้านั่นคือสิ่งที่เขตเวลาของคุณตั้งไว้สคริปต์ของคุณจะทำงานที่ UTC บวกหนึ่งชั่วโมง หากคุณตั้งค่าเป็น "ยุโรป / ปารีส" เวลาในการดำเนินการจะเปลี่ยนไปตามเวลาออมแสง


6

cronนี้อาจจะขึ้นอยู่กับระบบปฏิบัติการของคุณและมันของการดำเนินงานของ สิ่งนี้เป็นไปไม่ได้ในการใช้ cron ที่เป็นที่นิยมมากที่สุด, vixie/isc cron. จาก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

การเพิ่ม @Cyrus ตอบคำถามนี้คือสิ่งที่ฉันทำ:

ฉันสร้างสคริปต์ที่ตรวจสอบ UTC UTC:

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

จากนั้นฉันจะเพิ่มรายการ crontab สองรายการสำหรับออฟเซ็ตที่ฉันต้องการ:

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

จากหน้าคู่มือ:

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

สภาพแวดล้อมสามารถถูกนิยามใหม่ในคำจำกัดความ crontab ของผู้ใช้ แต่ cron จะจัดการงานในโซนเวลาเดียวเท่านั้น


1

ย้าย cronjob ของคุณไปที่ 8:00 และนอนหนึ่งชั่วโมงถ้าคุณอยู่ใน GMT + 1

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

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