Rain WikiWindows · Linux · Android

cron และ crontab

บริการดิสทริบิวชัน Linux ส่วนใหญ่

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)

วิธีเพิ่มงานรายวัน

  1. เปิด crontab ของคุณ: crontab -e
  2. เพิ่มบรรทัด เช่น: 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  3. บันทึกและออกจากโปรแกรม; cron จะรับการเปลี่ยนแปลงโดยอัตโนมัติ
  4. แสดงรายการงาน: crontab -l

ข้อควรระวัง

  • crontab -r จะลบ crontab ทั้งหมดโดยไม่มีการยืนยัน
  • ทดสอบคำสั่งด้วยตนเองโดยใช้ผู้ใช้เดียวกันก่อนที่จะกำหนดเวลา

แหล่งอ้างอิง

  1. crontab(5) man7.org
  2. crontab(5) (Debian) manpages.debian.org
  3. systemd.timer(5) man7.org

ตรวจสอบล่าสุด: