AliceLiumWork Smarter · Finish Faster

อ่าน cron เป็นภาษาไทย

แปลคำสั่ง crontab เป็นประโยคไทย บอก 5 เวลาที่จะรันถัดไป พร้อมเตือนกับดักเซิร์ฟเวอร์ UTC ที่ทำให้งานรันคลาด 7 ชั่วโมง

เข้าสู่ระบบเพื่อใช้เครื่องมือนี้ — ฟรี

สมัครฟรีในไม่ถึงนาที ไม่ต้องใส่บัตรเครดิต — แล้วใช้ได้ทั้ง 196 เครื่องมือ

ไม่มีลายน้ำ เก็บเครื่องมือที่ใช้บ่อย
เริ่มด้วย Google
ฟรี ไม่มีโฆษณา

ทุกบัญชีได้เครดิตฟรีวันละ 5 สะสมได้ถึง 15 · งานละ 1 เครดิต

ทำงานในเครื่องคุณ ไฟล์ไม่ถูกอัปโหลด เห็นผลทันที ไม่ต้องรอคิว หักเครดิต 1 ต่อการใช้หนึ่งครั้ง · ไม่มีเน็ตก็ใช้ได้และไม่หัก
ติดตรงไหน?
1

ใส่ข้อมูล พิมพ์หรือวางลงในช่อง — ไม่ต้องอัปโหลด ไม่ต้องรอคิว

2

เห็นผลทันที ผลลัพธ์อัปเดตตอนพิมพ์ เพราะคำนวณในเครื่องคุณเอง

3

คัดลอกไปใช้ กดคัดลอกแล้ววางต่อได้เลย ปิดหน้าเว็บแล้วข้อมูลหายไปพร้อมกัน

อยากพิสูจน์เอง? ปิด Wi-Fi หรือถอดสายเน็ต แล้วลองใช้เครื่องมือนี้ดู — มันยังทำงานได้ตามปกติ เพราะไม่มีอะไรต้องส่งไปไหน · ส่วนการเปิดหน้านี้ใหม่ตอนไม่มีเน็ตมีเงื่อนไขอยู่ ไม่ได้ได้ทุกกรณี

คำถามเกี่ยวกับอ่าน cron เป็นภาษาไทย

ตั้ง cron ไว้ 9 โมงเช้า ทำไมงานไปรันตอนสี่โมงเย็น?

เพราะเซิร์ฟเวอร์ที่เช่าจากต่างประเทศอย่าง DigitalOcean AWS Vultr หรือ Linode ตั้งนาฬิกาเครื่องเป็น UTC มาตั้งแต่แรก และ cron อ่านเวลาจากนาฬิกาของเครื่องเท่านั้น ไม่ได้อ่านจากเวลาที่เราคิดในหัว เวลาไทยเร็วกว่า UTC อยู่ 7 ชั่วโมง ตั้ง 09:00 บนเครื่อง UTC จึงไปตรงกับ 16:00 น. บ้านเรา ตรวจของจริงได้ด้วยคำสั่ง timedatectl ถ้าขึ้นว่า Time zone: Etc/UTC แปลว่าเจอกับดักนี้เข้าแล้ว ทางแก้ที่อ่านง่ายที่สุดคือใส่บรรทัด CRON_TZ=Asia/Bangkok ไว้เหนือรายการ cron แล้วเขียนเวลาเป็นเวลาไทยตรง ๆ ได้เลย ไม่ต้องนั่งลบ 7 ในหัวทุกครั้ง อีกทางคือตั้งเขตเวลาทั้งเครื่องด้วย sudo timedatectl set-timezone Asia/Bangkok แต่ต้องระวังว่าล็อกและงานอื่นบนเครื่องจะเปลี่ยนเขตเวลาตามไปด้วยทั้งหมด

ใส่ทั้งวันที่และวันในสัปดาห์ ทำไม cron รันบ่อยกว่าที่ตั้งใจ?

นี่คือกฎที่คนเข้าใจผิดกันมากที่สุดของ cron ถ้าช่องที่ 3 (วันที่ในเดือน) และช่องที่ 5 (วันในสัปดาห์) ไม่ใช่ดาวทั้งคู่ cron จะรันเมื่อ “ตรงอันใดอันหนึ่ง” ไม่ใช่ต้องตรงทั้งคู่ คำสั่ง 0 0 1 * 1 จึงรันทั้งวันที่ 1 ของทุกเดือน และรันทุกวันจันทร์อีกต่างหาก รวมกันเดือนละห้าหกครั้ง ไม่ใช่เฉพาะวันที่ 1 ที่บังเอิญเป็นวันจันทร์ ถ้าอยากได้เงื่อนไข “ต้องตรงทั้งคู่” cron ทำตรง ๆ ไม่ได้ ต้องปล่อยช่องหนึ่งเป็นดาว แล้วไปกรองอีกเงื่อนไขในคำสั่งเอง เช่น อยากได้ศุกร์ที่สามของเดือนให้ใส่ช่วงวันที่ 15-21 ในช่องที่ 3 แล้วต่อท้ายคำสั่งด้วยการเช็คว่าวันนี้เป็นวันศุกร์หรือไม่ก่อนค่อยทำงานจริง

ทุก 90 นาที หรือ ศุกร์ที่ 3 ของเดือน เขียนยังไง?

เขียนในบรรทัดเดียวไม่ได้ เพราะ cron นับ step อยู่ภายในช่องของตัวเองเท่านั้น ไม่ข้ามไปช่องถัดไป การเขียนดาวทับ 90 ในช่องนาทีจึงเหลือค่าเดียวคือนาทีที่ 0 ไม่ได้แปลว่าทุกชั่วโมงครึ่ง ถ้าต้องการทุก 90 นาทีจริง ๆ ต้องเขียนสองบรรทัดคู่กันคือ 0 0,3,6,9,12,15,18,21 * * * กับ 30 1,4,7,10,13,16,19,22 * * * ส่วน “ศุกร์ที่ 3 ของเดือน” หรือ “วันสุดท้ายของเดือน” เป็นรูปแบบของ Quartz กับ Spring (ตัวอักษร L W และเครื่องหมายชาร์ป) ซึ่ง crontab ของ Linux ไม่รู้จัก ต้องใช้วิธีกำหนดช่วงวันที่ให้กว้างไว้ก่อนแล้วเช็คเงื่อนไขที่เหลือในสคริปต์แทน เครื่องมือนี้จะบอกให้ทันทีถ้าตรวจพบรูปแบบที่ไม่ใช่ของ Linux

เครื่องหมาย % ในคำสั่ง ทำไมทำให้สคริปต์พัง?

ในไฟล์ crontab เครื่องหมายเปอร์เซ็นต์มีความหมายพิเศษคือ “ขึ้นบรรทัดใหม่” คำสั่งจะถูกตัดตรงตำแหน่งนั้นทันที ส่วนที่เหลือกลายเป็นข้อมูลที่ป้อนเข้าโปรแกรมแทน สคริปต์สำรองข้อมูลที่ตั้งชื่อไฟล์ด้วยวันที่จึงพังกันบ่อยมาก เพราะรูปแบบวันที่ใช้เปอร์เซ็นต์เต็มไปหมด วิธีแก้คือใส่แบ็กสแลชนำหน้าเปอร์เซ็นต์ทุกตัวในบรรทัด crontab หรือย้ายคำสั่งทั้งก้อน ไปไว้ในไฟล์สคริปต์แยกแล้วให้ cron เรียกไฟล์นั้นแทน ซึ่งเป็นวิธีที่แนะนำกว่า เพราะทดสอบง่าย และไม่ต้องคอยหนีอักขระพิเศษทุกครั้งที่แก้

คำสั่ง cron ที่วางลงไปถูกส่งไปเซิร์ฟเวอร์ไหม?

ไม่ถูกส่งไปไหนเลย การอ่านคำสั่ง คำนวณเวลาที่จะรัน และแปลงเขตเวลาทั้งหมด ทำด้วยจาวาสคริปต์ในเบราว์เซอร์ของคุณเอง ไม่มีการอัปโหลด และได้ผลทันที จึงวางบรรทัด crontab ที่มีพาธจริงบนเซิร์ฟเวอร์ ชื่อโฮสต์ หรือคีย์ที่ติดอยู่ท้ายคำสั่งได้อย่างปลอดภัย ปิดหน้าเว็บเมื่อไหร่ข้อมูลก็หายไปพร้อมกัน

เครื่องมือใกล้เคียง

บอกเราได้

เจอปัญหา หรืออยากได้อะไรเพิ่ม? บอกได้ตรงนี้เลย ไม่ต้องออกจากหน้านี้ไปหาอีเมล

ต้องเข้าสู่ระบบก่อนถึงจะส่งได้ — เพื่อให้เรารู้ว่าใครเจอปัญหา และกันข้อความอัตโนมัติโดยไม่ต้องให้คุณมานั่งพิสูจน์ว่าไม่ใช่บอท เข้าสู่ระบบ