cron และ crontab
cron คือ daemon แบบคลาสสิกของ Unix ที่ทำหน้าที่รันคำสั่งตามกำหนดการ ผู้ใช้แต่ละคนจะมี crontab ซึ่งแก้ไขได้ด้วยคำสั่ง crontab -e โดยแต่ละบรรทัดจะมีฟิลด์เวลาห้าฟิลด์ (นาที, ชั่วโมง, วันของเดือน, เดือน, วันของสัปดาห์) ตามด้วยคำสั่ง งานของระบบจะอยู่ใน /etc/crontab และ /etc/cron.d/
1ฟิลด์เวลา
'30 2 * * *' หมายถึง 02:30 น. ทุกวัน; '*/10 * * * *' ทุกสิบนาที; '0 9 * * 1' 09:00 น. ทุกวันจันทร์ วันของสัปดาห์ที่ 0 และ 7 คือวันอาทิตย์
2ไฟล์ระบบ
ไฟล์ใน /etc/cron.d/ และ /etc/crontab จะมีฟิลด์เพิ่มเติมคือชื่อผู้ใช้ ระหว่างฟิลด์เวลากับคำสั่ง ไดเรกทอรีเช่น /etc/cron.daily จะเก็บสคริปต์ที่รันวันละครั้ง
3ข้อควรระวังทั่วไป
cron รันด้วยสภาพแวดล้อมที่จำกัด: ควรใช้พาธแบบเต็มหรือตั้งค่า PATH ใน crontab ผลลัพธ์จะถูกส่งทางอีเมลถึงเจ้าของหรือสูญหายไป ควรเปลี่ยนเส้นทาง (redirect) ไปยังไฟล์บันทึก (log file) อักขระ % มีความหมายพิเศษในบรรทัด crontab และต้องใช้ \% เพื่อหลีกอักขระ
4systemd timers
บนดิสทริบิวชันที่ใช้ systemd หน่วย .timer เป็นทางเลือกหนึ่งที่มีการบันทึกใน journal, มีการหน่วงเวลาแบบสุ่ม และสามารถรันงานที่พลาดไปได้ (Persistent=true)
วิธีเพิ่มงานรายวัน
- เปิด crontab ของคุณ:
crontab -e - เพิ่มบรรทัด เช่น: 30 2 * * *
/usr/local/bin/backup.sh>>/var/log/backup.log2>&1 - บันทึกและออกจากโปรแกรม; cron จะรับการเปลี่ยนแปลงโดยอัตโนมัติ
- แสดงรายการงาน:
crontab -l
ข้อควรระวัง
crontab -rจะลบ crontab ทั้งหมดโดยไม่มีการยืนยัน- ทดสอบคำสั่งด้วยตนเองโดยใช้ผู้ใช้เดียวกันก่อนที่จะกำหนดเวลา
บทความที่เกี่ยวข้อง
- systemd units และ systemctlsystemd unit คืออะไร ประเภทของ unit ที่พบบ่อย รวมถึงวิธีการเริ่ม หยุด เปิดใช้งาน และตรวจสอบบริการต่างๆ ด้วย systemctl
- logrotateการทำงานของ logrotate วิธีการตั้งค่าใน /etc/logrotate.conf และ /etc/logrotate.d รวมถึงวิธีทดสอบกฎอย่างปลอดภัย
- journalctl และ systemd journalวิธีอ่านบันทึกด้วย journalctl ตรวจสอบพื้นที่ที่ journal ใช้งาน และลดขนาดอย่างปลอดภัยด้วยตัวเลือก --vacuum
แหล่งอ้างอิง
- crontab(5) man7.org
- crontab(5) (Debian) manpages.debian.org
- systemd.timer(5) man7.org
ตรวจสอบล่าสุด: