เอกสาร

เริ่มต้นอย่างรวดเร็ว + คำอธิบายฟังก์ชันของแต่ละส่วนและแต่ละอุปกรณ์ (อัปเดตต่อเนื่อง)

งานตามกำหนดการ (Cron)

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

ทำความรู้จักก่อน: Cron คืออะไร

Cron คือเครื่องมือ «ตั้งเวลาทำงาน» ที่มากับ Linux คุณสั่งให้มัน «สำรองฐานข้อมูลอัตโนมัติตอนตี 3 ทุกวัน» «ล้างบันทึกทุกชั่วโมง» «รีสตาร์ทบริการใดบริการหนึ่งทุกวันจันทร์»——ถึงเวลาก็ทำงานอัตโนมัติ ไม่ต้องมีคนเฝ้า

ภาพรวมฟังก์ชัน

ดู, เพิ่ม, ลบงานตามกำหนดการ Cron บนเซิร์ฟเวอร์เป้าหมาย

สถานการณ์ที่เหมาะสม

  • สำรองฐานข้อมูล, ล้างบันทึกตามเวลา
  • รันสคริปต์มอนิเตอร์ตามเวลา
  • รีสตาร์ทบริการ, อัปเดตใบรับรองตามเวลา

วิธีใช้งาน

เข้า «แผงจัดการระบบ → งานตามกำหนดการ» ของเซิร์ฟเวอร์เครื่องหนึ่ง จะเห็นงาน Cron ทั้งหมดในปัจจุบันของเซิร์ฟเวอร์นั้น

เพิ่มงาน

กรอกนิพจน์ Cron และคำสั่งที่ต้องการรัน:

ฟิลด์คำอธิบาย
นิพจน์เวลา5 ส่วน เช่น 0 3 * * * (ตี 3 ทุกวัน)
คำสั่งคำสั่ง shell ที่ต้องการรัน

รูปแบบนิพจน์ Cron (นาที ชั่วโมง วัน เดือน สัปดาห์):

* * * * *  คำสั่ง
│ │ │ │ │
│ │ │ │ └── วันในสัปดาห์ (0-7, 0/7=อาทิตย์)
│ │ │ └──── เดือน (1-12)
│ │ └────── วันที่ (1-31)
│ └──────── ชั่วโมง (0-23)
└────────── นาที (0-59)

ตัวอย่างที่ใช้บ่อย:

นิพจน์ความหมาย
*/5 * * * *ทุก 5 นาที
0 * * * *ทุกชั่วโมง
0 3 * * *ตี 3 ทุกวัน
0 3 * * 1ตี 3 ทุกวันจันทร์
0 3 1 * *ตี 3 วันที่ 1 ของทุกเดือน
0 3 * * 0ตี 3 ทุกวันอาทิตย์
30 2 * * *ตี 2:30 ทุกวัน

ตัวอย่างคำสั่งที่ใช้ได้จริง:

# สำรองฐานข้อมูลตอนตี 3 ทุกวัน (ตัวอย่าง)
0 3 * * * docker exec sshe-mysql mariadb-dump -uroot -p'<password>' dbname > /opt/backup/db-$(date +\%F).sql

# ล้างไฟล์ชั่วคราวทุก 6 ชั่วโมง
0 */6 * * * find /tmp -type f -mtime +7 -delete

# รีสตาร์ทบริการใดบริการหนึ่งตอนตี 4 ทุกวันจันทร์
0 4 * * 1 systemctl restart my-app

ข้อควรระวัง

1. งาน Cron รันในนามของผู้ใช้ปัจจุบันของเซิร์ฟเวอร์เป้าหมาย โปรดตรวจสอบว่าผู้ใช้คนนั้นมีสิทธิ์รันคำสั่ง

2. แนะนำให้เขียนคำสั่งเป็นเส้นทางสัมบูรณ์ (สภาพแวดล้อมของ Cron มีตัวแปรน้อย เส้นทางสัมพัทธ์อาจหาคำสั่งไม่เจอ)

3. หากคำสั่งใช้ % ต้อง escape เป็น \% (Cron มอง % เป็นอักขระพิเศษ)

4. หลังลบงาน Cron จะมีผลทันที

5. การแก้ไข Cron ระดับระบบ (/etc/crontab) อาจต้องทำนอกแผงควบคุม แผงควบคุมจัดการ crontab -l ของผู้ใช้ปัจจุบันเป็นค่าเริ่มต้น