วิธีการเรียกใช้งาน cron ใน GMT ไม่ใช่เวลาท้องถิ่น


8

ฉันจะทำให้งาน cron ทำงานใน GMT ไม่ใช่เวลาท้องถิ่นได้อย่างไร

นี่คือไฟล์ crontab ของฉัน:

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

งานของฉันดูเหมือนจะทำงานในเวลาท้องถิ่น (GMT + 11) ฉันกำลังใช้งาน os x snow leopard แต่จะย้ายโค้ดไปยัง linux เมื่อการพัฒนาเสร็จสมบูรณ์

สภาพแวดล้อม linux อาจเป็นสภาพแวดล้อมที่ใช้ร่วมกันซึ่งฉันอาจควบคุมการกำหนดค่าน้อย



คำตอบ:


8

ไม่ใช่ทุกรุ่นที่cronสนับสนุนการรันงานโดยใช้เขตเวลาอื่นที่ไม่ใช่ของระบบ

หากคุณทำเช่นนั้นเป็นไปได้ว่าข้อมูลจำเพาะควรเป็นTZ=GMTหรือTZ=UTC(ไม่มีวงเล็บเหลี่ยม) CRON_TZในบางกรณีตัวแปรจะเป็น

สิ่งที่ดีที่สุดที่ควรทำคือตรวจสอบเอกสารเฉพาะของระบบนั้น ๆ man 5 crontabดู


3

Europe/Londonหากเวลาท้องถิ่นของคุณคือ แล้ว:

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

ตัวอย่างอื่น:

ถ้าเวลาปกติของคุณเป็น+0500กะUTCและเวลาตามฤดูกาลของคุณมีการเปลี่ยนแปลงของ+0600 UTCจากนั้นเพิ่ม+5ทุกชั่วโมงที่ระบุในตัวอย่างด้านบน ซึ่งหมายถึงการทำงานที่08:15amและ09:15amเวลาท้องถิ่นของคุณตามลำดับ ดังนั้นเส้น cron ที่คุณแก้ไขจะมีลักษณะเช่นนี้:

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

[แก้ไข] ให้แน่ใจว่าได้\หลบหนี%อักขระร้อยละใด ๆในไฟล์ crontab ของคุณ ในฐานะที่เป็น crontab ตีความพวกเขาเป็นตัวคั่นบรรทัดใหม่ เช่น->%\%


1
จะมีปัญหาหากคุณอยู่ในเขตเวลาซึ่งใช้ DST ดังนั้น (ตัวอย่าง) บางครั้งเขตเวลาของคุณคือ +01: 00 และ somethimes +02: 00
inemanja

2
บางทีคุณสามารถทำอย่างละเอียด? ฉันไม่คิดอย่างนั้น เราได้พิจารณา DST แล้ว แต่ละกรณีมีสาย cron ของตัวเอง 1 สำหรับแต่ละรายการที่มี / ไม่มี DST
Dreamcat4

นี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากมันอนุญาตให้ individiul สั่งพฤติกรรมที่แตกต่าง
Patrick McCann

0

คุณอาจจะห่อไบนารีแครมเดิมได้

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

สวัสดี hlovdal คุณช่วยอธิบายขั้นตอนเหล่านี้ได้มั้ย
ประนอมดวงตา

คุณกำลังคัดลอก crond ไปยัง crond.real จากนั้นแทนที่ crond ด้วยสคริปต์สั้น ๆ ที่คุณตั้งค่าและเอ็กซ์พอร์ต TZ จากนั้นเรียกใช้ crond.real?
ประนอมดวงตา

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