พิเศษ! เพียงใช้โค้ด freehosting1y รับฟรีโฮสติ้ง 1 ปี เฉพาะออเดอร์ที่มียอดซื้อตั้งแต่ 25,000 บาทขึ้นไปที่มีโฮสติ้ง

วิธีใช้ cron/anacron ทำงานรายวัน รายสัปดาห์ รายเดือน อัตโนมัติ

  • 0:35 min

  • 0 comments

แม้ว่า systemd timers จะมีความทันสมัย แต่ cron และ anacron ยังคงเป็นมาตรฐานที่ติดตั้งมาพร้อมกับ Linux ทุกเครื่อง และมีความเรียบง่ายในการใช้งานสูงมาก บทความนี้จะเจาะลึกวิธีตั้งค่าให้งานทำงานอัตโนมัติด้วยเครื่องมือดั้งเดิมเหล่านี้ครับ


1. ปัญหาของ Cron แบบมาตรฐาน

cron ถูกออกแบบมาให้รันงานตามเวลาที่กำหนดเป๊ะๆ (Time-based job scheduler) แต่มีจุดอ่อนสำคัญคือ:
* ถ้าเครื่องปิด งานก็พลาด: หากกำหนดให้รันงานตอนตี 3 แต่คุณปิดคอมพิวเตอร์ไว้ งานนั้นจะไม่รันเลยจนกว่าจะถึงรอบถัดไป
* ไม่เหมาะกับ Desktop/Laptop: คอมพิวเตอร์ส่วนบุคคลมักไม่ได้เปิดทิ้งไว้ 24/7 ทำให้งานที่ตั้งไว้ใน crontab มักถูกข้ามไป

วิธีแก้: เราจึงต้องใช้ anacron เข้ามาช่วย ซึ่งถูกออกแบบมาให้รันงานที่ “พลาดไป” ทันทีที่เปิดเครื่องครับ


2. ขั้นตอนการตั้งค่า

วิธีที่ 1: ใช้ Cron (สำหรับงานที่ต้องรันตรงเวลา)

พิมพ์คำสั่งเพื่อแก้ไขตารางงานของคุณ:
bash
crontab -e

ในไฟล์นี้ ให้ใส่บรรทัดคำสั่งตามรูปแบบ: นาที ชั่วโมง วันที่ เดือน วันในสัปดาห์ คำสั่ง

วิธีที่ 2: ใช้ Anacron (สำหรับงานที่พลาดไม่ได้)

ระบบ Linux (เช่น Ubuntu/Debian) จะมีโฟลเดอร์สำหรับงานอัตโนมัติอยู่แล้วใน /etc/
* /etc/cron.daily/
* /etc/cron.weekly/
* /etc/cron.monthly/

เพียงแค่คุณนำสคริปต์ไปวางในโฟลเดอร์เหล่านี้ ระบบจะจัดการรันให้เองโดยอัตโนมัติเมื่อเครื่องเปิดอยู่


3. ตัวอย่างการตั้งค่า

ตัวอย่างใช้ Cron (รันสคริปต์สำรองข้อมูล)

“`bash

รันทุกวัน ตอนตี 3

0 3 * * * /home/user/backup.sh

รันทุกวันจันทร์ ตอน 8 โมงเช้า

0 8 * * 1 /home/user/weekly_report.sh

รันวันที่ 1 ของทุกเดือน ตอนเที่ยงคืน

0 0 1 * * /home/user/monthly_clean.sh
“`

ตัวอย่างการใช้ Anacron (ผ่านไฟล์ /etc/anacrontab)

ถ้าคุณต้องการสร้างงานรายวันเอง ให้ไปที่ /etc/anacrontab และเพิ่มบรรทัดนี้:
“`text

period(วัน) delay(นาที) job-identifier command

1 5 daily_backup /home/user/backup.sh
“`
หมายเหตุ: เลข 5 หมายความว่าให้รอ 5 นาทีหลังจากเปิดเครื่องก่อนเริ่มรันงาน เพื่อไม่ให้เครื่องหน่วงตอนเปิดเครื่องใหม่ๆ


4. ข้อควรระวัง

  1. Environment Variables: cron ไม่ได้โหลดค่า Environment เหมือนกับที่คุณเปิด Terminal ปกติ ดังนั้นในสคริปต์ของคุณ ต้องระบุ Path แบบเต็มเสมอ เช่น /usr/bin/python3 แทนที่จะใช้ python3 หรือระบุ Path ของไฟล์ให้ชัดเจน (เช่น /home/user/script.sh แทนที่จะใช้ ./script.sh)
  2. สิทธิ์การเข้าถึง (Permission): อย่าลืมเปลี่ยนไฟล์สคริปต์ให้เป็นไฟล์ที่รันได้ (chmod +x script.sh)
  3. การจัดการ Output: งานที่รันโดย cron จะไม่มีหน้าจอให้คุณเห็น ถ้างานเกิด Error คุณจะไม่รู้เลย แนะนำให้เขียน Log ลงไฟล์เสมอ เช่น:

    0 3 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1

    (เป็นการเก็บทั้ง Output ปกติและ Error ไว้ในไฟล์ .log)
  4. อย่าตั้งเวลาซ้อนทับกัน: หากงานของคุณใช้ทรัพยากรสูง (เช่น สแกนไวรัสหรือบีบอัดข้อมูล) อย่าตั้งให้รันพร้อมกันหลายๆ งาน เพราะจะทำให้ระบบค้างได้
  5. การใช้ Anacron: อย่าลืมว่าถ้าคุณเอาไฟล์ไปวางใน /etc/cron.daily/ ไฟล์นั้น ต้องไม่มีจุด (.) ในชื่อไฟล์ (เช่น ห้ามตั้งชื่อว่า backup.sh ให้ตั้งว่า backup) มิฉะนั้น Debian/Ubuntu จะไม่รันไฟล์นั้นครับ

Outsource.Men รับพัฒนาเว็บไซต์ Shopify, Wordpress, Wix, ดูแลระบบ ERP, SaaS, Cloud, เขียนโปรแกรม Tradingview, Liquid, Google และดูแลระบบธุรกิจออนไลน์ โดยทีมผู้เชี่ยวชาญอิสระ

รับคำปรึกษาฟรี >>คลิกที่นี่<<

แชร์โพสต์นี้:

19

Jul

เตรียมตัวให้พร้อม! Google อัปเดตเงื่อนไขใหม่ Android Backup เริ่มนับรวมพื้นที่เก็บข้อมูลแล้ว

Google ประกาศเปลี่ยนนโยบาย Android Backup ใหม่! ข้อมูลเครื่องเริ่มนับรวมในพื้นที่ Google Account แล้ว เช็กผลกระทบและวิธีตั้งค่าปิด-เปิดสำรองข้อมูลแอปที่นี่ก่อนเริ่มจริงใน 45 วัน

15

Jul

anacron เริ่มทำงานวันไหน ถ้าไฟล์ weekly เพิ่มในโฟลเดอร์ cron

หากคุณเพิ่มไฟล์สคริปต์เข้าไปใน /etc/cron.weekly/ วันนี้ การทำงานของมันจะขึ้นอยู่กับ "ประวัติการรัน" ของระบบครับ โดยมีรายละเอียดดังนี้: 1. มันจะทำงานเมื่อไหร่? anacron จะตรวจสอบไฟล์ใน /var/spool/anacron/ เพื่อดูว่าสคริปต์นั้นๆ ถูกรันครั้งล่าสุดเมื่อไหร่: * ถ้ายังไม่เคยรันเลย: anacron มักจะมองว่ามัน "ถึงเวลาที่ต้องรันแล้ว" และจะรันสคริปต์นั้น ภายในเวลาไม่นานหลังจากที่คุณเพิ่มไฟล์เข้าไป (โดยปกติจะรอประมาณ 5-10 นาทีตามค่า START_HOURS_RANGE…

10

Jul

วิธีใช้ cron/anacron ทำงานรายวัน รายสัปดาห์ รายเดือน อัตโนมัติ

แม้ว่า systemd timers จะมีความทันสมัย แต่ cron และ anacron ยังคงเป็นมาตรฐานที่ติดตั้งมาพร้อมกับ Linux ทุกเครื่อง และมีความเรียบง่ายในการใช้งานสูงมาก บทความนี้จะเจาะลึกวิธีตั้งค่าให้งานทำงานอัตโนมัติด้วยเครื่องมือดั้งเดิมเหล่านี้ครับ 1. ปัญหาของ Cron แบบมาตรฐาน cron ถูกออกแบบมาให้รันงานตามเวลาที่กำหนดเป๊ะๆ (Time-based job scheduler) แต่มีจุดอ่อนสำคัญคือ: * ถ้าเครื่องปิด…