จะเป็นการเขียนตัวอย่างการใช้ Cron Job ตั้งเวลาเพื่อที่จะทำ automation task ตั้งเวลาไปลบไฟล์พวก temp หรือ clear cache ที่เป็นขยะในระบบ linux ตามเวลา ยกตัวอย่างโดย ลบไฟล์ Log ต่างๆ มักจะสะสมจนเต็มพื้นที่ดิสก์ การตั้งค่าให้ระบบลบไฟล์เหล่านี้ทิ้งโดยอัตโนมัติในเวลาที่คนใช้งานน้อยที่สุด (เช่น เที่ยงคืนวันอาทิตย์) เป็นวิธีที่ดีในการดูแลรักษาเครื่อง
cron คืออะไร
cron คือ ระบบตั้งเวลาทำงานใน linux และ MacOs เหมือน Windows Task Scheduler ใน windows ก่อนจะเขียนคำสั่ง เราต้องเข้าใจระบบ “5 ดาว” ของ Cron ซึ่งเรียงลำดับดังนี้:
- นาที
(0-59)
- ชั่วโมง
(0-23)
- วันที่
(1-31)
- เดือน
(1-12)
- วันในสัปดาห์
(0-6 โดย 0 คือวันอาทิตย์)
จากโจทย์ ทุกวันอาทิตย์ เวลาเที่ยงคืน จะได้
- นาที:
0
- ชั่วโมง:
0 (เที่ยงคืนพอดี)
- วันที่:
* (หมายถึงทุกวันที่)
- เดือน:
* (หมายถึงทุกเดือน)
- วันในสัปดาห์:
0 (หมายถึงวันอาทิตย์)
อะไรที่ไม่ระบุให้ใช้ * แทน
ดังนั้นรหัสเวลาคือ: 0 0 * * 0
หรือจะใช้เว็บ online cron editor อย่าง
คำสั่งตัวอย่าง
การลบ cache จะใช้คำสั่ง
find /tmp -type f -atime +7 -delete
อธิบายคือ
find /tmp ไปหาจาก folder /tmp
-type f เฉพาะไฟล์ (ถ้าลบ folder บางโปรแกรมที่เข้ามาเขียน log ใน folder จะ error ได้)
-atime +7 ไฟล์ที่ “ถูกเข้าถึงครั้งสุดท้าย (Accessed) นานเกินกว่า 7 วันที่แล้ว”
ในการลบไฟล์ Temp การใช้ atime จะ ปลอดภัยกว่า ครับ:
- กำหนดเวลาโดย
- mtime (Modification Time): คือเวลาที่ไฟล์ถูก “แก้ไข” เนื้อหา
- atime (Access Time): คือเวลาที่ไฟล์ถูก “อ่าน”
ที่ใช่เวลา อ่านเป็นหลัก เพราะไฟล์อาจจะโดนสร้างไว้นานแล้ว (mtime) แต่โปรแกรมยังเข้ามาอ่านเป็นระยะ (atime) ทำให้ป้องกันการลบไฟล์ที่ระบบยังใช้อยู่
- เวลาที่กำหนดคือ
+7: นานกว่า 7 วัน (8, 9, 10… วันขึ้นไป)
-7: ภายใน 7 วันที่ผ่านมา (6, 5, 4… จนถึงปัจจุบัน)
7: 7 วันที่แล้วแบบเป๊ะๆ (24 ชั่วโมงของวันที่ 7)
-delete คือ เจอแล้วก็ลบมันไป
เราสามารถทดสอบว่าคำสั่งนี้ได้ผลตามที่ต้องการมั๋ย โดยการ run ใน terminal ตามปกติได้เลย
find /tmp -type f -atime +7 -ls
ผลลัพธ์ที่แสดงออกมา คุณจะเห็นวันที่และเวลาเข้าถึงครั้งสุดท้ายของแต่ละไฟล์ครับ
เปิดหน้าจัดการ Cron
sudo crontab -e
ถ้าเป็นการใช้ครั้งแรกจะมีตัวเลือกอย่าง
1. /bin/nano <—- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
ตอบโดยใช้ edittor ที่ชอบโดยใส่ตัสเลจ แล้ว enter ถ้า enter เลยจะใช่ default คือ 1 nano หลังจากนั้นจะใช้ editor เปิด cron config มาให้แก้
การดู Cron job
sudo crontab -l
การเพิ่ม / แก้ / ลบ Cron job
- เปิดโดยคำสั่ง
sudo crontab -e
- การแก้ไข
- การเพิ่มก็เลื่อนลงมา แล้ว ใส่ข้อความในรูบแบบ
รหัสเวลา ว่าง คำสั่ง
เช่น
0 0 * * 0 find /tmp -type f -atime +7 -delete
- การแก้บรรทัดที่ตรงกับคำสั่งต้องการ แล้วแก้ในรูปแบบเหมือน การเพิ่ม
- การลบ คือหาแล้วลบบรรทัดที่ตรงกับคำสั่ง
- save อย่าง nano ใช้ control + x แล้ว Y
- ถ้าเขียนผิด: เมื่อกดออกจาก Editor ระบบจะแจ้งเตือนว่า
crontab: installing new crontab พร้อมข้อความ Error และถามว่าคุณจะแก้ไขใหม่หรือไม่ (Edit again? [y/n])
อ่านเพิ่มเติม