เอกสาร
เริ่มต้นอย่างรวดเร็ว + คำอธิบายฟังก์ชันของแต่ละส่วนและแต่ละอุปกรณ์ (อัปเดตต่อเนื่อง)
งานตามกำหนดการ (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 ของผู้ใช้ปัจจุบันเป็นค่าเริ่มต้น