แปลคำสั่ง crontab เป็นประโยคไทย บอก 5 เวลาที่จะรันถัดไป พร้อมเตือนกับดักเซิร์ฟเวอร์ UTC ที่ทำให้งานรันคลาด 7 ชั่วโมง
สมัครฟรีในไม่ถึงนาที ไม่ต้องใส่บัตรเครดิต — แล้วใช้ได้ทั้ง 196 เครื่องมือ
ทุกบัญชีได้เครดิตฟรีวันละ 5 สะสมได้ถึง 15 · งานละ 1 เครดิต
ใส่ข้อมูล พิมพ์หรือวางลงในช่อง — ไม่ต้องอัปโหลด ไม่ต้องรอคิว
เห็นผลทันที ผลลัพธ์อัปเดตตอนพิมพ์ เพราะคำนวณในเครื่องคุณเอง
คัดลอกไปใช้ กดคัดลอกแล้ววางต่อได้เลย ปิดหน้าเว็บแล้วข้อมูลหายไปพร้อมกัน
อยากพิสูจน์เอง? ปิด Wi-Fi หรือถอดสายเน็ต แล้วลองใช้เครื่องมือนี้ดู — มันยังทำงานได้ตามปกติ เพราะไม่มีอะไรต้องส่งไปไหน · ส่วนการเปิดหน้านี้ใหม่ตอนไม่มีเน็ตมีเงื่อนไขอยู่ ไม่ได้ได้ทุกกรณี
เพราะเซิร์ฟเวอร์ที่เช่าจากต่างประเทศอย่าง 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 ถ้าช่องที่ 3 (วันที่ในเดือน) และช่องที่ 5 (วันในสัปดาห์) ไม่ใช่ดาวทั้งคู่ cron จะรันเมื่อ “ตรงอันใดอันหนึ่ง” ไม่ใช่ต้องตรงทั้งคู่ คำสั่ง 0 0 1 * 1 จึงรันทั้งวันที่ 1 ของทุกเดือน และรันทุกวันจันทร์อีกต่างหาก รวมกันเดือนละห้าหกครั้ง ไม่ใช่เฉพาะวันที่ 1 ที่บังเอิญเป็นวันจันทร์ ถ้าอยากได้เงื่อนไข “ต้องตรงทั้งคู่” cron ทำตรง ๆ ไม่ได้ ต้องปล่อยช่องหนึ่งเป็นดาว แล้วไปกรองอีกเงื่อนไขในคำสั่งเอง เช่น อยากได้ศุกร์ที่สามของเดือนให้ใส่ช่วงวันที่ 15-21 ในช่องที่ 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 เรียกไฟล์นั้นแทน ซึ่งเป็นวิธีที่แนะนำกว่า เพราะทดสอบง่าย และไม่ต้องคอยหนีอักขระพิเศษทุกครั้งที่แก้
ไม่ถูกส่งไปไหนเลย การอ่านคำสั่ง คำนวณเวลาที่จะรัน และแปลงเขตเวลาทั้งหมด ทำด้วยจาวาสคริปต์ในเบราว์เซอร์ของคุณเอง ไม่มีการอัปโหลด และได้ผลทันที จึงวางบรรทัด crontab ที่มีพาธจริงบนเซิร์ฟเวอร์ ชื่อโฮสต์ หรือคีย์ที่ติดอยู่ท้ายคำสั่งได้อย่างปลอดภัย ปิดหน้าเว็บเมื่อไหร่ข้อมูลก็หายไปพร้อมกัน
ต้องเข้าสู่ระบบก่อนถึงจะส่งได้ — เพื่อให้เรารู้ว่าใครเจอปัญหา และกันข้อความอัตโนมัติโดยไม่ต้องให้คุณมานั่งพิสูจน์ว่าไม่ใช่บอท เข้าสู่ระบบ