มีวิธีการตรวจสอบรูปแบบ / etc / crontab หรือไม่?


35

ฉันชอบที่จะติดภารกิจตามกำหนดเวลาไว้ใน / etc / crontab เพื่อที่ฉันจะได้เห็นภาพรวมของสิ่งที่กำหนดให้ทำงานโดยไม่คำนึงว่าผู้ใช้นั้นทำงานอยู่ที่ใด

gotcha เพียงอย่างเดียวคือรูปแบบที่ไม่ได้รับการตรวจสอบในการบันทึกซึ่งแตกต่างจาก crontab -e - ดังนั้นอักขระจรจัดสามารถแบ่ง cron ทั้งหมดได้อย่างเงียบ ๆ

มีวิธีการตรวจสอบรูปแบบ / etc / crontab ก่อน / หลังบันทึกหรือไม่


4
ถ้าอย่างฉันคุณมาที่นี่เพื่อหาวิธีที่เรียบง่าย (ไม่ใช่สคริปต์) เพื่อบอกคุณว่าคุณมีรายการ cron ของคุณถูกต้องหรือไม่คุณอาจสนใจcronchecker.net - มันเป็นเครื่องมือตรวจสอบออนไลน์สำหรับรายการ cron กับมนุษย์ - ผลผลิตที่เป็นมิตร
Matt Gibson

คำตอบ:


16

วิธีเดียวที่เชื่อถือได้ที่ฉันพบคือการตรวจสอบบันทึก

cronตรวจสอบ/etc/crontabทุกนาทีและบันทึกข้อความที่ระบุว่าได้ทำการโหลดซ้ำหรือพบข้อผิดพลาด

ดังนั้นหลังจากแก้ไขแล้วให้เรียกใช้สิ่งนี้:

sleep 60; grep crontab /var/log/syslog | tail

หรือเพื่อไม่รอสักครู่ แต่จนถึงนาทีถัดไป + 5 วินาที:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail

ตัวอย่างเอาต์พุตที่มีข้อผิดพลาด:

Jan  9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan  9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

ผลผลิตที่ดี:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)

ที่อยู่ใน Debian 8 บนระบบอื่น cron อาจเข้าสู่ระบบไฟล์อื่น

(ฉันคิดว่าฉันสามารถหลีกเลี่ยงการหาไฟล์บันทึกที่ถูกต้องโดยใช้ systemd journalctl -u cronแต่นั่นไม่ได้แสดงรายการบันทึกเหล่านี้ให้ฉันและดูเหมือนว่าจริงๆแล้วได้หยุดการบันทึกเหตุการณ์ cron เมื่อ 2 วันก่อนด้วยเหตุผลบางประการ)


ทดสอบบน FreeBSD 10.3 ใช้งานได้อย่างมีเสน่ห์เพียงแค่แทนที่ path path ด้วย / var / log / cron
Jette


11

สคริปต์เปลือก cool Wickedมีเชลล์สคริปต์ที่ตรวจสอบความถูกต้องของไฟล์ crontab

คุณสามารถรับไฟล์ zip ที่มีสคริปต์ได้ที่นี่

สคริปต์นี้เรียกว่าverifycron


1
แหล่งที่มาอยู่บนเว็บไซต์สำหรับหนังสือเช่นกัน: สัญชาตญาณ. com/wicked/showscript.cgi?053-verifycron.shชอบหนังสือเล่มนั้นมาก

ลิงก์ใช้งานไม่ได้อีกต่อไปตั้งแต่วันที่ 11 มกราคม 2017
Epskampie

3

ฉันพบโซลูชันที่ยอดเยี่ยมนี้ที่นี่: https://crontab.guru

มันไม่เพียงตรวจสอบ crontab แต่จะบอกคุณอย่างชัดเจนว่า crontab จะทำงานอะไรและเมื่อใดและจะเน้นที่ข้อผิดพลาด


0

บน Ubuntu ดูเหมือนว่าฉันจะสามารถเรียกใช้:

crontab path/to/crontab/file

หมายเหตุ: สิ่งนี้มีผลข้างเคียงของการเริ่ม cronjob นี้ (ขอบคุณ @NZD)

หากไฟล์ไม่ถูกต้องฉันจะพบข้อผิดพลาดเช่น:

"crontab":11: bad minute
errors in crontab file, can't install.

1
คำสั่งนี้จะตรวจสอบไฟล์ crontab แต่ในเวลาเดียวกันจะติดตั้งมัน (หากไม่มีข้อผิดพลาด) นี่อาจเป็นผลข้างเคียงที่ไม่พึงประสงค์สำหรับ OP
NZD

ขอบคุณ @NZD ฉันได้เพิ่มสิ่งนี้ไว้ในคำตอบของฉันเพื่อให้แน่ใจว่า OP ตระหนักถึงสิ่งนั้น
conradkdotcom

@conradk คำสั่งไม่ได้เริ่ม cronjob มันเขียนทับไฟล์ crontab ที่มีอยู่ของผู้ใช้ด้วยไฟล์ที่ให้ไว้
MadHatter สนับสนุน Monica

สิ่งนี้ใช้ไม่ได้กับปัญหาที่เป็นไปได้ทั้งหมดกับ crontab; มันจะจับปัญหาบางอย่างที่จ้องมอง แต่ก็ไม่ได้สิ่งนี้เช่น: * 4/0 * * /bin/myscript.sh - 4/0มันไม่ถูกต้อง แต่วิธีนี้ไม่ได้รับการตรวจจับ
JDS

@JDS มันไม่คุ้มค่าหรือไม่ เป็นค่าที่0ต้องห้ามหรือไม่? unix.stackexchange.com/questions/32027/…
conradkdotcom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.