การจัดตารางเวลางานโดยใช้ crontab จะเกิดอะไรขึ้นเมื่อคอมพิวเตอร์ถูกปิดในช่วงเวลานั้น


85

ฉันกำหนดเวลางานบางอย่างโดยใช้ crontab

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

แต่ละงานที่ไม่ได้รับ cron ทำงานหลังจากเปิดคอมพิวเตอร์หรือไม่ได้รับงานในวันนั้นหรือไม่ หากงานที่ไม่ได้รับการดำเนินการต่อมีวิธีการกำหนดค่า cron เพื่อให้ทำงานที่ไม่ได้รับหลังจากเปิดเครื่องคอมพิวเตอร์หรือไม่


3
ฉันพยายามมองหาการสอนแบบ anacron ในเว็บ แต่หาสิ่งดีๆไม่เจอ การดูหน้าคนยังไม่ได้ช่วยฉันเท่าไหร่ ฉันจะเปลี่ยน crontab ที่มีอยู่แล้วเพื่อเปลี่ยนเป็น anacron ได้อย่างไร? หรือการสอนใด ๆ ในเรื่องนี้จะเป็นประโยชน์มาก
seg.server.fault

1
ฉันได้แก้ไขคำตอบเพื่อรวมตัวอย่างบางส่วนแล้ว ฉันหวังว่าจะช่วย!
jeff

คำตอบ:


70

เมื่อคอมพิวเตอร์ของคุณถูกปิด (หรือ cron daemon ไม่ทำงาน), งาน cron จะไม่เริ่มทำงาน

หากคุณมีงานที่คุณต้องการเรียกใช้หลังจากข้อเท็จจริงในช่วงเวลาดังกล่าวเมื่อคอมพิวเตอร์ถูกปิดให้ใช้ anacron ติดตั้งโดยค่าเริ่มต้นให้ดู "man anacron", "man anacrontab" หรือไฟล์ / etc / anacrontab สำหรับข้อมูลเพิ่มเติม

Ubuntu ใช้ anacron เป็นค่าเริ่มต้นสำหรับรายการ crontab ใน:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

ปล่อย crontabs ที่เหลือให้จัดการโดย cron daemon หลักโดยเฉพาะ:

/etc/crontab
/etc/cron.d
/var/spool/cron

หมายเหตุ

Anacron ไม่ได้ทำงานเป็น daemon แต่อาศัยสคริปต์การเริ่มต้นระบบและ cron เองที่จะเรียกใช้

ในกล่อง Ubuntu 8.04 ที่ฉันกำลังดูอยู่ /etc/init.d/anacron จะถูกเรียกใช้ตอนบูตและอีกครั้งโดย cron ทุกเช้าเวลา 07:30 น.

README ที่ /usr/share/doc/anacron/README.gz มีข้อมูลมากกว่าเล็กน้อยอยู่ใน manpages เล็กน้อย

ตัวอย่าง

สำหรับงานแบบง่าย "รายวัน", "รายสัปดาห์", "รายเดือน" ให้ใส่สำเนาหรือลิงก์ไปยังสคริปต์ในหนึ่งในไดเรกทอรี Anacron จะดูแลการทำงานทุกวัน / สัปดาห์ / เดือนและหากคอมพิวเตอร์ของคุณปิดในวันที่สคริปต์ "รายสัปดาห์" จะทำงานตามปกติมันจะทำงานในครั้งต่อไปที่เปิดเครื่องคอมพิวเตอร์

เป็นอีกตัวอย่างหนึ่งสมมติว่าคุณมีสคริปต์ที่นี่: /usr/local/sbin/maint.sh

และคุณต้องการเรียกใช้มันทุกสามวันรายการมาตรฐานใน / etc / crontab จะมีลักษณะดังนี้:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

หากคอมพิวเตอร์ของคุณไม่ได้เปิดเวลา 00:00 นในวันที่ 3 ของเดือนงานจะไม่ทำงานจนกว่าจะถึงวันที่ 6

หากต้องการให้งานรันในอันดับที่ 4 เมื่อคอมพิวเตอร์ปิดอยู่และ "คิดถึง" การรันในลำดับที่ 3 คุณจะต้องใช้สิ่งนี้ใน / etc / anacrontab (อย่าลืมลบบรรทัดออกจาก / etc / crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

"การหน่วงเวลา" ของ "5" ด้านบนหมายความว่า anacron จะรอ 5 นาทีก่อนที่จะทำงานนี้ ความคิดคือการป้องกันไม่ให้ anacron ยิงสิ่งออกทันทีในเวลาบูต


5
โดยค่าเริ่มต้น Ubuntu ใช้ anacron
3dinfluence

1
ขอบคุณ 3dincluence - คำตอบที่ปรับเพื่อระบุ crontabs ใดที่จัดการโดย anacron ในเซ็ตอูบุนตูเริ่มต้น
เจฟฟ์

2
หากคุณใส่สคริปต์ใน /etc/cron.*/ แทนที่จะมีรายการ crontab ของตัวเองอย่ามี "." ในชื่อไฟล์ของสคริปต์ เดเบียนและอูบุนตูใช้ run-parts เพื่อรันสคริปต์ดังกล่าวและโดยปกติแล้ว run-parts จะไม่สนใจไฟล์ที่มี ในชื่อไฟล์ - นี่คือเพื่อไม่ให้เรียกใช้สคริปต์รุ่น. dpkg-old และ. dpkg-dist ที่ถูกเปลี่ยนชื่อจากการอัปเกรด ดังนั้นเรียกสคริปต์หรือ symlink "ดูแล" มากกว่า "maint.sh"
cas

OpenSUSE ใช้ cronie เป็นค่าเริ่มต้นจาก 11.2 เป็นต้นไป (เป็น Tumbleweed / Leap 42.2 ในปัจจุบัน) วิธีใช้anacronให้ติดตั้งcronie-anacronแพ็คเกจ
palswim

13

ขึ้นอยู่กับตัวกำหนดเวลา cron ที่คุณใช้ vanilla cron daemon ขั้นพื้นฐานจะไม่ทำงานที่พลาดเนื่องจากการหยุดทำงานของระบบ อย่างไรก็ตามมี cron schedulers อื่น ๆ ที่ออกแบบมาสำหรับสถานการณ์นี้โดยเฉพาะซึ่งจะทำสิ่งนี้ให้คุณ สองตัวอย่างพบมากที่สุดคือanacronและfcron


5

งานที่กำหนดเวลาไว้ในขณะที่ปิดเครื่องคอมพิวเตอร์จะไม่ทำงานเมื่อเปิดเครื่องคอมพิวเตอร์อีกครั้ง


2

หากคุณปิดในขณะที่งาน cron กำลังทำงานระบบจะปิดลงและงาน cron จะหยุดทำงาน (หรือไม่ทำงาน)

ทางเลือกหนึ่งที่คุณสามารถเช็คอินได้คือ anacron


2

ขึ้นอยู่กับ cron deamon จริง ๆ ที่คุณกำลังเรียกใช้ Vixie-cron จะข้าม cronjobs ที่ไม่ได้รับ fcronจะเรียกใช้ crons ที่ไม่ได้รับโดยเร็วที่สุด IIRC มันใช้ vixie-cron เช่นกันดังนั้นหากนั่นคือสิ่งที่คุณกำลังมองหาคุณอาจต้องการตรวจสอบ fcron

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