หากคุณเพิ่มไฟล์สคริปต์เข้าไปใน /etc/cron.weekly/ วันนี้ การทำงานของมันจะขึ้นอยู่กับ “ประวัติการรัน” ของระบบครับ โดยมีรายละเอียดดังนี้:
1. มันจะทำงานเมื่อไหร่?
anacron จะตรวจสอบไฟล์ใน /var/spool/anacron/ เพื่อดูว่าสคริปต์นั้นๆ ถูกรันครั้งล่าสุดเมื่อไหร่:
* ถ้ายังไม่เคยรันเลย: anacron มักจะมองว่ามัน “ถึงเวลาที่ต้องรันแล้ว” และจะรันสคริปต์นั้น ภายในเวลาไม่นานหลังจากที่คุณเพิ่มไฟล์เข้าไป (โดยปกติจะรอประมาณ 5-10 นาทีตามค่า START_HOURS_RANGE ในไฟล์กำหนดค่า เพื่อไม่ให้รบกวนการทำงานช่วงบูตเครื่อง)
* ถ้าเคยรันมาแล้ว: มันจะนับถอยหลังไปอีก 7 วันนับจากครั้งล่าสุดครับ
2. กลไกการทำงานเบื้องหลัง
ระบบ Linux ของคุณจะมีไฟล์ที่ชื่อว่า /etc/crontab ซึ่งมักจะมีบรรทัดนี้อยู่:
bash
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
* หมายความว่า ระบบจะพยายามรัน anacron ทุกวันเวลา 06:25 (หรือ 06:47 ในวันอาทิตย์)
* แต่ถ้าเครื่องของคุณปิดอยู่ตอน 6 โมงเช้า anacron จะทำงานทันทีที่เครื่องเปิด โดยจะตรวจสอบว่าไฟล์ใน cron.weekly ถูกรันไปหรือยังในรอบ 7 วันที่ผ่านมา
3. วิธีตรวจสอบว่ามันจะรันเมื่อไหร่ (หรือรันไปหรือยัง)
คุณสามารถเช็คไฟล์ Timestamp ได้ว่าระบบบันทึกไว้ว่ารันครั้งล่าสุดเมื่อไหร่ โดยใช้คำสั่ง:
bash
ls -l /var/spool/anacron/
คุณจะเห็นไฟล์ชื่อ cron.weekly อยู่ข้างใน ถ้าคุณลอง cat ดูไฟล์นั้น:
bash
cat /var/spool/anacron/cron.weekly
คุณจะเห็น วันที่ล่าสุดที่มันรันไป ถ้าวันที่นั้นผ่านไปไม่ถึง 7 วัน มันจะไม่รันใหม่จนกว่าจะครบกำหนดครับ
สรุปคำแนะนำ:
- ถ้าคุณเพิ่งเพิ่มไฟล์วันนี้: ระบบจะมองว่านี่คือการรันครั้งแรก (หรือรันครั้งถัดไปที่ยังไม่เกิดขึ้น) มันจะรันให้คุณในวันนี้หรือเช้าวันพรุ่งนี้ (ขึ้นอยู่กับจังหวะที่ตัวจัดการ Cron ของระบบเรียกใช้
anacron) - ถ้าคุณใจร้อน: อยากเทสต์ว่าสคริปต์ทำงานถูกต้องไหม ให้รันผ่าน Terminal ตรงๆ ได้เลยครับ:
bash
sudo run-parts --test /etc/cron.weekly
(คำสั่งนี้จะแสดงรายชื่อไฟล์ที่จะถูกรันออกมาให้เห็นโดยที่ยังไม่รันจริง เพื่อเช็คว่าชื่อไฟล์ถูกต้องและระบบมองเห็นไฟล์นั้นหรือไม่)
ข้อควรระวังสำคัญ: อย่าลืม chmod +x /etc/cron.weekly/ชื่อไฟล์ของคุณ เสมอ เพราะถ้าไม่มี Permission นี้ anacron จะข้ามไฟล์นั้นไปอย่างเงียบๆ ครับ!
