เครื่องสร้างนิพจน์ Cron
สร้างและตรวจสอบนิพจน์ Cron สำหรับการตั้งเวลางาน อินเทอร์เฟซภาพพร้อมคำอธิบายที่อ่านง่ายและเวลาการทำงานถัดไป
วิธีใช้งาน
เลือกจากพรีเซ็ตด่วนหากกำหนดเวลาของคุณตรงกับรูปแบบทั่วไป เช่น 'ทุกชั่วโมง' 'ทุกวัน' หรือ 'ทุกวันทำงาน' พรีเซ็ตเหล่านี้จะกำหนดค่าฟิลด์ทั้งหมดด้วยนิพจน์ cron ที่ผ่านการใช้งานจริงมาแล้วในทันที
สำหรับกำหนดเวลาแบบกำหนดเอง ใช้ตัวเลือกแบบเลื่อนลงเพื่อกำหนดค่าแต่ละส่วนประกอบของเวลา: นาที (0-59) ชั่วโมง (0-23) วัน (1-31) เดือน (1-12) และวันในสัปดาห์ (0-6 โดย 0=วันอาทิตย์) แต่ละตัวเลือกมีค่าทั่วไปให้เลือกทั้งแบบ 'ทุก' ค่าเฉพาะเจาะจง และรูปแบบช่วงเวลา
เลือกรูปแบบช่วงเวลาเช่น 'ทุก 5 นาที' หรือ 'ทุก 2 ชั่วโมง' จากตัวเลือกแบบเลื่อนลงสำหรับกำหนดเวลาที่ทำซ้ำ รูปแบบเหล่านี้ใช้ไวยากรณ์ขั้นบันได (*/N) เพื่อสร้างช่วงเวลาสม่ำเสมอโดยไม่ต้องระบุทุกค่า
ตรวจสอบนิพจน์ Cron ที่สร้างขึ้นซึ่งแสดงในฟิลด์ข้อความ นี่คือไวยากรณ์ cron จริงที่คุณจะใช้ในไฟล์ crontab การกำหนดค่า CI/CD หรือแพลตฟอร์มอัตโนมัติของคุณ
อ่านคำอธิบายภาษาที่เข้าใจง่ายด้านล่างนิพจน์เพื่อยืนยันว่ากำหนดเวลาตรงกับความตั้งใจของคุณ คำอธิบายแบบภาษาคนนี้ช่วยจับข้อผิดพลาดในการตั้งค่าก่อนนำไปใช้งานจริง
ตรวจสอบรายการ 5 ครั้งถัดไปเพื่อดูว่างานของคุณจะทำงานเมื่อใดอย่างแม่นยำ การดูตัวอย่างนี้ช่วยระบุปัญหาเวลาที่ไม่คาดคิด เช่น ปัญหาเขตเวลาหรือความซับซ้อนจากการปรับเวลาตามฤดูกาล
คลิกปุ่มคัดลอกเพื่อคัดลอกนิพจน์ cron ไปยังคลิปบอร์ด พร้อมวางลงในไฟล์ crontab การกำหนดค่ากำหนดเวลา หรือเครื่องมืออัตโนมัติของคุณ
ดูตารางรูปแบบนิพจน์ Cron ด้านล่างสุดเพื่อทำความเข้าใจตำแหน่งของฟิลด์ ค่าที่อนุญาต และอักขระพิเศษ สำหรับการแก้ไขด้วยตนเองในระดับสูง
เคล็ดลับโปร
- ตรวจสอบเวลา 5 ครั้งถัดไปเสมอก่อนนำงาน cron ไปใช้ในระบบจริง การดูตัวอย่างนี้เปิดเผยปัญหาเขตเวลา การเปลี่ยนเวลาตามฤดูกาล และรูปแบบการทำงานที่ไม่คาดคิดซึ่งอาจสร้างปัญหาได้
- จำไว้ว่านิพจน์ cron ไม่รวมหน่วยวินาที ช่วงเวลาที่เล็กที่สุดคือนาที หากคุณต้องการให้ทำงานถี่กว่าหนึ่งนาที ควรพิจารณาเครื่องมือกำหนดเวลาอื่นหรือใช้วิธีวนลูปในสคริปต์
- เมื่อใช้ทั้งฟิลด์วันและวันในสัปดาห์ การใช้งาน cron ส่วนใหญ่จะใช้ตรรกะ OR ตัวอย่างเช่น '0 0 13 * 5' จะทำงานเวลาเที่ยงคืนของวันที่ 13 ของเดือน หรือ ทุกวันศุกร์ ไม่ใช่เฉพาะวันศุกร์ที่ 13 เท่านั้น
- สำหรับระบบที่ใช้งานจริง ควรหลีกเลี่ยงการตั้งงานหนักตรงชั่วโมงเต็มพอดี (0 * * * *) เพราะระบบหลายตัวรันงานบำรุงรักษาในช่วงเวลานี้ ควรเลื่อนออกไปสองสามนาที เช่น (7 * * * *)
- ทดสอบนิพจน์ cron ในสภาพแวดล้อมพัฒนาก่อนเสมอ โดยเฉพาะเมื่อใช้ช่วงค่าหรือค่าขั้นบันไดที่ซับซ้อน เพื่อให้แน่ใจว่าทำงานตามที่คาดหวังในการใช้งาน cron ต่างเวอร์ชัน
- บันทึกกำหนดเวลาของคุณด้วยคอมเมนต์ในไฟล์ crontab ควรใส่คำอธิบายภาษาคนที่ได้จากเครื่องมือนี้ไว้ด้วย เพื่อช่วยให้ผู้ดูแลระบบในอนาคตเข้าใจเจตนาของการตั้งเวลา
- ระวังเรื่องเขตเวลา งาน cron มักทำงานตามเขตเวลาท้องถิ่นของเซิร์ฟเวอร์ ซึ่งอาจต่างจากเขตเวลาของคุณหรือของผู้ใช้ ควรพิจารณาใช้ UTC เพื่อความสม่ำเสมอ
กรณีการใช้งาน
การสำรองข้อมูลฐานข้อมูลอัตโนมัติ
ตั้งเวลาสำรองข้อมูลฐานข้อมูลเป็นประจำเพื่อป้องกันข้อมูลสูญหายและพร้อมกู้คืนเมื่อเกิดเหตุ
การทำงานอัตโนมัติของ CI/CD Pipeline
สั่งให้ระบบ build ทดสอบ และ deploy ทำงานตามเวลาที่กำหนดสำหรับเวิร์กโฟลว์ continuous integration
สคริปต์บำรุงรักษาระบบ
รันงานทำความสะอาด หมุนเวียนไฟล์ log ล้างแคช และงานบำรุงรักษาตามตารางเวลาสม่ำเสมอ
การสร้างรายงานและส่งอีเมลอัตโนมัติ
สร้างและกระจายรายงานอัตโนมัติ สรุปข้อมูลวิเคราะห์ และอีเมลแจ้งเตือนตามเวลาที่กำหนด
งานซิงโครไนซ์ข้อมูล
ซิงข้อมูลระหว่างระบบ อัปเดตแคช รีเฟรชดัชนีการค้นหา และรักษาความสอดคล้องของข้อมูลข้ามแพลตฟอร์ม
การตรวจสอบระบบและ Health Check
รันการตรวจสอบสุขภาพระบบ สคริปต์เฝ้าระวังประสิทธิภาพ และระบบแจ้งเตือนตามช่วงเวลาสม่ำเสมอ
คำถามที่พบบ่อย
นิพจน์ cron คืออะไร และใช้ที่ไหน?
นิพจน์ cron คือรูปแบบการกำหนดเวลาที่ใช้ห้าฟิลด์ (นาที ชั่วโมง วัน เดือน วันในสัปดาห์) เพื่อระบุว่างานควรทำงานเมื่อใดโดยอัตโนมัติ เดิมมาจาก cron ของ Unix ปัจจุบันใช้กันในระบบ Linux/Unix แพลตฟอร์มคลาวด์ (AWS CloudWatch, Azure Logic Apps) เครื่องมือ CI/CD (Jenkins, GitLab CI) แพลตฟอร์มอัตโนมัติ (Zapier, n8n) และเฟรมเวิร์กการเขียนโปรแกรม (Node-cron, Spring) ตัวอย่างนิพจน์ '0 2 * * *' หมายถึง 'ทำงานเวลา 02:00 ทุกวัน'
จะสร้างนิพจน์ cron สำหรับ 'ทุก 5 นาที' ได้อย่างไร?
เลือก 'ทุก 5 นาที' จากตัวเลือกนาที ซึ่งจะสร้างนิพจน์ '*/5 * * * *' ไวยากรณ์ */5 หมายถึง 'ทุก 5 นาที' เริ่มนับจาก 0 (ทำงานที่นาทีที่ :00, :05, :10, :15 และต่อไป) สำหรับช่วงอื่นๆ ให้ใช้ */10 สำหรับทุก 10 นาที */15 สำหรับทุก 15 นาที และในทำนองเดียวกัน เครื่องหมายดอกจัน (*) ในฟิลด์อื่นหมายถึงงานจะทำงานโดยไม่คำนึงถึงชั่วโมง วัน เดือน หรือวันในสัปดาห์
ทำไมงาน cron ไม่ทำงานเฉพาะวันศุกร์ที่ 13 เมื่อตั้งวัน=13 และวันในสัปดาห์=ศุกร์?
การใช้งาน cron ส่วนใหญ่ใช้ตรรกะ OR เมื่อระบุทั้งฟิลด์วันและวันในสัปดาห์ (ไม่ใช่ wildcard) นิพจน์ของคุณจะทำงานในวันที่ 13 ของเดือนใดก็ได้ หรือ ในวันศุกร์ใดก็ได้ ไม่ใช่เฉพาะวันศุกร์ที่ 13 หากต้องการกำหนดเวลาสำหรับการรวมวันกับวันในสัปดาห์แบบเจาะจง ให้ใช้ตรรกะเงื่อนไขในสคริปต์ของคุณแทนที่จะพึ่งนิพจน์ cron เพราะไวยากรณ์ cron ไม่สามารถแสดงเงื่อนไข AND ระหว่างสองฟิลด์นี้ได้
จะตั้งงานให้ทำงานทุกวันทำงานเวลา 09:00 ได้อย่างไร?
ใช้พรีเซ็ต 'ทุกวันทำงาน' หรือกำหนดค่าเองดังนี้: นาที=0 ชั่วโมง=9 วัน=* (ทุก) เดือน=* (ทุก) วันในสัปดาห์='เฉพาะวันทำงาน' ซึ่งจะสร้างนิพจน์ '0 9 * * 1-5' โดย 1-5 หมายถึงวันจันทร์ถึงวันศุกร์ งานจะทำงานเวลา 09:00 เฉพาะวันทำงานเท่านั้นและข้ามวันหยุดสุดสัปดาห์โดยอัตโนมัติ ควรตรวจสอบรายการการทำงานครั้งถัดไปว่าแสดงเฉพาะวันจันทร์ถึงศุกร์
cron ใช้เขตเวลาใดในการกำหนดเวลางาน?
งาน cron ทำงานตามเขตเวลาท้องถิ่นของระบบที่ cron daemon กำลังทำงานอยู่ (เขตเวลาของเซิร์ฟเวอร์ ไม่ใช่เขตเวลาส่วนตัวของคุณ) ตรวจสอบเขตเวลาของเซิร์ฟเวอร์ได้ด้วยคำสั่ง 'date' หรือ 'timedatectl' สำหรับบริการคลาวด์ควรอ่านเอกสารประกอบ (AWS Lambda ใช้ UTC เป็นค่าเริ่มต้น) หากต้องการกำหนดเวลาที่ไม่ขึ้นกับเขตเวลา ให้แปลงเวลาที่ต้องการเป็นเขตเวลาของเซิร์ฟเวอร์ หรือใช้ UTC สำหรับทุกงาน cron แล้วปรับสคริปต์ให้สอดคล้อง สำหรับเซิร์ฟเวอร์ในไทยควรตรวจว่าตั้งเป็น Asia/Bangkok (UTC+7) หรือไม่
รันงาน cron ทุก 90 นาทีหรือช่วงเวลาที่หาร 60 ไม่ลงตัวได้ไหม?
cron ไม่รองรับช่วงเวลาเช่น 90 นาทีที่ไม่ลงตัวกับขอบเขตชั่วโมงโดยตรง ไวยากรณ์ */90 จะพยายามทำ 'ทุก 90 นาที' แต่จะรีเซ็ตทุกชั่วโมงทำให้เวลาผิดจากที่คาด สำหรับช่วง 90 นาที ให้เลือกวิธีใดวิธีหนึ่ง: (1) ระบุเวลาเฉพาะด้วยตนเอง เช่น (0 0,3,6,9 * * * ร่วมกับ 30 1,4,7,10 * * *) (2) รันทุกชั่วโมงแล้วใช้ตรรกะในสคริปต์ให้ทำงานสลับครั้งบวก 30 นาที หรือ (3) ใช้ตัวกำหนดเวลาอื่นที่รองรับช่วงเวลาซับซ้อน
'0 */2 * * *' กับ '0 0,2,4,6,8,10,12,14,16,18,20,22 * * *' ต่างกันอย่างไร?
ทั้งสองนิพจน์ให้ผลลัพธ์เหมือนกันทุกประการ คือทำงานเวลาเที่ยงคืน 02:00 04:00 และต่อไปเรื่อยๆ (ทุก 2 ชั่วโมง) ไวยากรณ์ '*/2' เป็นการเขียนแบบขั้นบันไดที่หมายถึง 'ทุกค่าที่ 2 เริ่มจาก 0' ซึ่งกระชับกว่า ส่วนรายการที่คั่นด้วยจุลภาคระบุแต่ละชั่วโมงอย่างชัดเจน ควรใช้แบบขั้นบันไดสำหรับรูปแบบที่สม่ำเสมอ และใช้รายการแบบระบุชัดสำหรับเวลาเฉพาะที่ไม่เป็นช่วงสม่ำเสมอ
จะรันงานในวันสุดท้ายของทุกเดือนได้อย่างไร?
cron มาตรฐานไม่สามารถแสดง 'วันสุดท้ายของเดือน' ได้โดยตรงเพราะแต่ละเดือนมีจำนวนวันไม่เท่ากัน วิธีแก้ทางอ้อม: (1) ตั้งเวลาสำหรับวันที่ 28-31 พร้อมสคริปต์ที่ตรวจว่า 'ถ้าวันพรุ่งนี้เป็นเดือนใหม่ ให้ทำงาน' (2) รันทุกวันแล้วใช้ตรรกะวันที่ในสคริปต์ หรือ (3) ใช้ cron รุ่นขยายที่รองรับไวยากรณ์ 'L' (last) ควรทดสอบให้ครอบคลุมทั้งเดือนกุมภาพันธ์ เดือนที่มี 30 วัน และเดือนที่มี 31 วันเสมอ
ใช้นิพจน์ cron ใน Windows Task Scheduler ได้ไหม?
ไม่ได้ เพราะ Windows Task Scheduler ใช้รูปแบบกำหนดเวลาแบบ XML ของตัวเอง ไม่ใช่นิพจน์ cron แต่คุณสามารถ: (1) ติดตั้งเครื่องมือภายนอกเช่น 'cron for windows' หรือ 'cronw' (2) ใช้ Windows Subsystem for Linux (WSL) ซึ่งมี cron ดั้งเดิม (3) แปลนิพจน์ cron ของคุณไปใส่ในหน้าจอของ Task Scheduler ด้วยตนเอง หรือ (4) ใช้สคริปต์ PowerShell ร่วมกับ scheduled tasks ส่วนแพลตฟอร์มคลาวด์ที่รองรับ cron ยังใช้งานได้ปกติจากเครื่องพัฒนา Windows
ทำไมงาน cron ไม่ทำงานทั้งที่นิพจน์ดูถูกต้อง?
ปัญหาที่พบบ่อย: (1) เขตเวลา งานทำงานตามเขตเวลาของเซิร์ฟเวอร์ ไม่ใช่ของคุณ (2) ไวยากรณ์ crontab ผิด ต้องแน่ใจว่ารูปแบบทั้งบรรทัดถูกต้องและใช้พาธเต็มไปยังสคริปต์ (3) สิทธิ์ของสคริปต์ ต้องให้สิทธิ์รันได้ด้วย chmod +x (4) ตัวแปรสภาพแวดล้อม cron มี PATH และ environment น้อยมาก ควรใช้พาธแบบเต็ม (5) การเปลี่ยนทางเอาต์พุต ควรตรวจ log หรือเปลี่ยนทางเอาต์พุตเพื่อดูข้อผิดพลาด (6) cron daemon ไม่ทำงาน ตรวจสอบด้วย 'systemctl status cron' และควรทดลองรันสคริปต์ด้วยตนเองก่อนเสมอ
ทำไมต้องใช้เครื่องมือนี้
เครื่องสร้างนิพจน์ Cron ขจัดทั้งความยากในการเรียนรู้และข้อผิดพลาดทางไวยากรณ์ที่มักเกิดกับการกำหนดเวลาแบบ cron ทำให้การทำงานอัตโนมัติเข้าถึงได้สำหรับนักพัฒนา ผู้ดูแลระบบ และทีมปฏิบัติการ ไม่ว่าจะมีความเชี่ยวชาญเรื่อง cron มากน้อยเพียงใด แทนที่จะต้องจำตำแหน่งของฟิลด์ ค่าที่อนุญาต และความหมายของอักขระพิเศษ คุณสามารถกำหนดตารางเวลาด้วยตัวเลือกที่เข้าใจง่ายและเห็นนิพจน์ผลลัพธ์ได้ทันที คำอธิบายภาษาที่อ่านเข้าใจง่ายและการแสดงเวลาทำงานครั้งถัดไปให้ผลตอบรับในทันที ช่วยจับข้อผิดพลาดเช่นความสับสนเรื่องเขตเวลา ปัญหาตรรกะระหว่างวันกับวันในสัปดาห์ หรือช่วงเวลาที่ไม่ได้ตั้งใจ ก่อนที่คุณจะนำไปใช้ในระบบจริง สำหรับทีมที่กำลังรับสมาชิกใหม่ หรือนักพัฒนาที่ใช้ cron เป็นครั้งคราว เครื่องมือนี้ทำหน้าที่ทั้งเป็นตัวสร้างและแหล่งเรียนรู้ เพราะแสดงให้เห็นว่าไวยากรณ์ cron ทำงานอย่างไรผ่านตัวอย่างจริง พรีเซ็ตด่วนครอบคลุมความต้องการกำหนดเวลาทั่วไปถึงราว 80% ด้วยการคลิกเพียงครั้งเดียว ช่วยประหยัดเวลาสำหรับงานประจำเช่นการสำรองข้อมูลรายชั่วโมง รายงานรายวัน หรือการบำรุงรักษารายสัปดาห์ ส่วนการแสดงการทำงาน 5 ครั้งถัดไปมีค่ามหาศาลสำหรับตารางเวลาที่ซับซ้อน เพราะเปิดเผยว่างานจะรันเมื่อไหร่จริงๆ และช่วยระบุปัญหาเช่นการทำงานในวันหยุดที่ไม่ได้ตั้งใจ ด้วยการเปลี่ยนการตั้งค่า cron จากการท่องจำให้เป็นการเลือกแบบเห็นภาพ เครื่องมือนี้ช่วยเร่งเวิร์กโฟลว์ DevOps ป้องกันบั๊กจากการตั้งเวลา และทำให้ระบบอัตโนมัติน่าเชื่อถือขึ้น ไม่ว่าคุณจะตั้งค่าสคริปต์สำรองข้อมูล CI/CD pipeline งานเฝ้าระวังระบบ หรือการซิงโครไนซ์ข้อมูล การมีตัวสร้าง cron ที่เชื่อถือได้ช่วยให้งานที่ตั้งเวลาไว้ทำงานตรงตามที่ต้องการ ลดช่วงเวลาที่ระบบใช้งานไม่ได้และปัญหาการปฏิบัติงานที่เกิดจากการตั้งเวลาผิดพลาด
เครื่องมือที่เกี่ยวข้อง
สร้างตัวระบุ UUID v1, v4 และ v7 แบบรักษาความเป็นส่วนตัวภายในเบราว์เซอร์ของคุณ
นาฬิกาจับเวลาและนับถอยหลังที่แม่นยำมิลลิวินาทีสำหรับการจับเวลาและการเพิ่มประสิทธิภาพ
แปลงเวลาระหว่างเขตเวลาต่างๆ ทั่วโลก เปรียบเทียบหลายเขตเวลาพร้อมกัน
ทดสอบนาฬิกาภายในของคุณโดยหยุดตั้งเวลาให้ตรงกับเวลาเป้าหมาย