Tag Archive cron

Byphunsanit

Linux: Cron Job ล้างขยะ clear cache อัตโนมัติ

จะเป็นการเขียนตัวอย่างการใช้ 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

  1. เปิดโดยคำสั่ง
    sudo crontab -e
  2. การแก้ไข
    • การเพิ่มก็เลื่อนลงมา แล้ว ใส่ข้อความในรูบแบบ
      รหัสเวลา ว่าง คำสั่ง
      เช่น
      0 0 * * 0 find /tmp -type f -atime +7 -delete
    • การแก้บรรทัดที่ตรงกับคำสั่งต้องการ แล้วแก้ในรูปแบบเหมือน การเพิ่ม
    • การลบ คือหาแล้วลบบรรทัดที่ตรงกับคำสั่ง
  3. save อย่าง nano ใช้ control + x แล้ว Y
    • ถ้าเขียนผิด: เมื่อกดออกจาก Editor ระบบจะแจ้งเตือนว่า crontab: installing new crontab พร้อมข้อความ Error และถามว่าคุณจะแก้ไขใหม่หรือไม่ (Edit again? [y/n])

อ่านเพิ่มเติม