แจกโพยตั้งเวลา cron job ด้วย crontab

โพยตั้งเวลาทำงาน Cron job ด้วย Crontab (หรือชื่อเต็ม Cron Table)

อ่านจบ ใส่ Crontab ได้เอง ไม่ต้องง้อ tool ดูรูปนี้ก็พอ!

.

หลาย ๆ คนคงจะใช้ Cron job เป็นโปรแกรมที่ใช้ตั้งเวลาในการทำงาน automation ตามเวลาที่เรากำหนดไว้ เช่น พวก CI/CD อะไรงี้ แล้วถ้าเราตั้งเวลาในการทำงาน เราก็ต้องใช้ Crontab เพื่อบอกว่าให้ทำงานอันนี้เมื่อไหร่

⏰ โดยการตั้งเวลาโดยการใช้ Crontab นั้น จะมี 5 field ที่ใช้ในการตั้งเวลา คือ

1. minute: นาที ค่าที่ใส่ได้คือ 0 - 59

2. hour: ชั่วโมง ใส่ 0 - 23

3. day of month: อันนี้เป็นวันที่ในปฎิทิน เช่น วันที่ 1 งี้ ค่าที่ใส่ได้จะเป็น 1 - 31

4. month: เดือน แน่นอนมี 12 เดือน ใส่ 1 - 12

5. day of week: วันในสัปดาห์ เช่น วันจันทร์ ค่าที่ใส่ได้ 0 - 6 เริ่มจากวันอาทิตย์ จะเป็นค่า 0 วันจันทร์เป็นค่า 1 จนถึงวันเสาร์เป็นค่า 6 และค่า 7 จะเป็นวันอาทิตย์ในบางระบบ

.

การใส่ค่าเวลา นอกจากใส่ตัวเลขไปตรง ๆ แล้ว

สามารถใส่ syntax อื่น ๆ ได้ด้วย

- *: ทุก ๆ เช่น ถ้าอยู่ใน field minute หมายถึงทุกนาที

- ,: ใช้คั่นบอกสำหรับเคสที่ต้องการใส่มากกว่า 1 ค่าใน field เช่น วันธรรมดา ใส่ 1,2,3,4,5

- -: สามารถใส่ค่าเป็นช่วงได้ด้วย เช่น วันธรรมดา ใส่ 1-5

- */n: คือทุก ๆ n ครั้ง โดย n ต้องหารลงตัวด้วยนะ เช่น ถ้าใส่ใน field นาที ต้องหาร 60 ลงตัว ส่วนชั่วโมงต้องหาร 24 ลงตัว โดย n คือ ตัวหาร 60 (สำหรับนาที) หรือ 24 (สำหรับชั่วโมง)

.

การใช้งานหน้าตาจะเป็นแบบนี้

`<minute> <hour> <day of month> <month> <day of week> <command to execute>`

.

⭐ ตัวอย่างแบบ basic

- ทุกวันตอน 6 โมงเย็น `0 18 * * *`

- ทุกวันจันทร์ตอน 6 โมงเย็น `0 18 * * 1`

- วันที่ 3 ตอน 6 โมงเย็น ของทุกเดือน `0 18 3 * *`

⭐ ตัวอย่างแบบยากขึ้นมาหน่อย

- ทุกวันเสาร์ตอน 5 ทุ่ม 50 นาที `50 23 * * 6`

- ทุกวันที่ 1 และ 16 ของทุกเดือน เวลาบ่ายสามโมงครึ่ง `30 15 1,16 * *`

- ทุกวันธรรมดาตอน 7 โมงครึ่ง `30 7 * * 1,2,3,4,5` หรือจะเป็น `30 7 * * 1-5` ก็ได้

- ทุก 30 นาที ของทุกวันทำงาน `*/30 * * * 1,2,3,4,5` หรือจะเป็น `*/30 * * * 1-5` ก็ได้เช่นกัน

- ทุก 4 ชั่วโมง นาทีที่ 0 `0 */4 * * *`

- ทุก 2 ชั่วโมง ตั้งแต่ 9:30 ถึง 18:30 `30 9-18/2 * * *`

- นาทีแรกของปีใหม่ของทุกปี `0 0 1 1 *`

- ทุกชั่วโมงตั้งแต่ 10 โมงเช้า ถึงหกโมงเย็น ในวันเสาร์อาทิตย์ `0 10-18 * * 6-7`

- ทุกนาทีที่มีเธอ `* * * * *`

.

ไม่แน่ใจว่าเพื่อน ๆ ใช้ทำอะไรกันบ้างน้า หรือมีตัวอย่างอะไรน่าสนใจ มาบอกกันได้น้า ทางเราไม่ได้ใช้นานแล้ว แหะ ๆ

#Lemon8ฮาวทู #programmer #developer #รวมเรื่องไอที #ไอทีน่ารู้

2025/8/8 แก้ไขเป็น

... อ่านเพิ่มเติมเวลาค้นคำว่า “cron job คือ” หรือ “crontab” ส่วนใหญ่จะเจอคนงง 2 เรื่อง: cron คือโปรแกรมตั้งเวลาอะไรสักอย่างบน Linux/Unix และ crontab คือไฟล์/ตารางที่เราเขียน “กฎเวลา” ให้ cron ไปเรียกคำสั่งตามเวลาที่กำหนดนั่นเอง สิ่งที่ผมใช้เช็กทุกครั้งก่อนใส่จริง (กันพลาด) 1) Cron job ทำงานด้วยผู้ใช้ไหน: cron ของแต่ละ user แยกกัน คำสั่งที่รันได้/สิทธิ์เข้าถึงไฟล์อาจไม่เหมือนตอนเรารันในเทอร์มินัลปกติ 2) Cron มักไม่โหลด environment เหมือน shell ปกติ: PATH อาจไม่ครบ ทำให้รันคำสั่งไม่เจอ วิธีแก้ง่าย ๆ คือใช้ “พาธเต็ม” เช่น /usr/bin/python3 หรือกำหนด PATH ไว้บนบรรทัดบนสุดของ crontab 3) ใส่ timezone ให้ชัด: เครื่อง server อยู่คนละโซนเวลาได้ ถ้าเป็นงานสำคัญควรเช็กเวลาเครื่อง (date) หรือกำหนด TZ ในระบบ/บริการให้ตรง คำสั่งที่ใช้บ่อย (แบบทำเองได้ ไม่ง้อ tool) - เปิด/แก้ไข crontab ของ user ปัจจุบัน: crontab -e - ดูรายการที่ตั้งไว้: crontab -l - ลบทั้งหมด (ระวังมาก): crontab -r ทริคการเขียนคำสั่งท้ายสุดให้ชัวร์ - แนะนำให้ redirect log ไว้ดูย้อนหลัง เช่น */30 * * * 1-5 /path/to/script.sh >> /var/log/myjob.log 2>&1 (2>&1 คือรวม error ไปที่ไฟล์เดียวกัน) ตัวอย่างที่คนชอบถาม (แนว cron cheat sheet เพิ่มเติม) - ทุก 5 นาที: */5 * * * * <command> - ทุกวันตอนเที่ยงคืน: 0 0 * * * <command> - ทุกวันจันทร์-ศุกร์ เวลา 9:00: 0 9 * * 1-5 <command> - ทุกสิ้นเดือน (ทำไม่ได้ตรง ๆ ใน cron แบบ 100%): ผมมักใช้วิธีรันทุกวันแล้วเช็กในสคริปต์ว่าพรุ่งนี้ขึ้นเดือนใหม่หรือยัง หรือเลือกใช้ 28-31 แล้วเช็กซ้ำในสคริปต์เพื่อกันรันเกิน ข้อควรระวังเรื่อง “*/n” ที่เจอบ่อย - */30 ในช่องนาที = ทุก 30 นาที (00,30) - แต่ถ้าอยาก “เริ่มที่นาทีที่ 10 แล้วทุก ๆ 30 นาที” ต้องเขียน 10-59/30 (ได้ 10,40) สรุป: ถ้าจำ 5 ฟิลด์ + สัญลักษณ์ (* , - /) ได้ และระวังเรื่อง PATH/log/timezone เวลาใส่ crontab ก็จะมั่นใจขึ้นมากครับ