หากฉันตั้งค่าcron
งานไม่ถูกต้องพวกเขาดูเหมือนจะล้มเหลวในทันที ฉันควรค้นหาบันทึกข้อผิดพลาดที่จะเข้าใจสิ่งที่ผิดพลาดหรือไม่
หากฉันตั้งค่าcron
งานไม่ถูกต้องพวกเขาดูเหมือนจะล้มเหลวในทันที ฉันควรค้นหาบันทึกข้อผิดพลาดที่จะเข้าใจสิ่งที่ผิดพลาดหรือไม่
คำตอบ:
ดังที่คนอื่น ๆ ได้ชี้ให้เห็นคุณcron
จะส่งอีเมลถึงคุณผลลัพธ์ของโปรแกรมใด ๆ ที่มันทำงาน (ถ้ามีผลลัพธ์ใด ๆ ) ดังนั้นหากคุณไม่ได้รับผลลัพธ์ใด ๆ โดยทั่วไปมีความเป็นไปได้สามประการ:
crond
ไม่สามารถแม้แต่เริ่มต้นเชลล์สำหรับการเรียกใช้โปรแกรมหรือส่งอีเมลcrond
มีปัญหาในการส่งออกทางไปรษณีย์หรือจดหมายสูญหายกรณีที่ 1. ไม่น่าเป็นไปได้มาก แต่มีบางสิ่งที่ควรเขียนในบันทึก cron Cron มีสิ่งอำนวยความสะดวก syslog ที่สงวนไว้ดังนั้นคุณควรตรวจสอบ/etc/syslog.conf
(หรือไฟล์ที่เทียบเท่าใน distro ของคุณ) เพื่อดูว่าข้อความของสถานที่cron
นั้นถูกส่งไปที่ใด สถานที่ท่องเที่ยวที่เป็นที่นิยม ได้แก่/var/log/cron
, และ/var/log/messages
/var/log/syslog
2. ในกรณีที่คุณควรตรวจสอบบันทึกจดหมายภูต: ข้อความจากภูต Cron root@yourhost
มักจะปรากฏเป็นจาก คุณสามารถใช้MAILTO=...
บรรทัดในไฟล์ crontab เพื่อให้ cron ส่งอีเมลไปยังที่อยู่เฉพาะซึ่งควรทำให้ grep ของ mailer daemon บันทึกง่ายขึ้น ตัวอย่างเช่น
MAILTO=my.offsite.email@example.org
00 15 * * * echo "Just testing if crond sends email"
ในกรณีที่ 3 คุณสามารถทดสอบว่าโปรแกรมนั้นทำงานจริงหรือไม่โดยการผนวกคำสั่งอื่นที่มีผลกระทบที่คุณสามารถตรวจสอบได้เช่น:
00 15 * * * /a/command; touch /tmp/a_command_has_run
เพื่อให้คุณสามารถตรวจสอบว่าcrond
มีการทำงานบางอย่างจริงโดยดูที่ mtime /tmp/a_command_has_run
ของ
dead.letter
ในรูทหรือโฮมไดเร็กทอรีของผู้ใช้ที่เกี่ยวข้อง
คุณสามารถส่งเอาต์พุตงานไปยังไฟล์บันทึกได้อย่างชัดเจน:
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
โปรดทราบว่าสิ่งนี้จะทำให้พฤติกรรมของอีเมลที่กล่าวถึงก่อนหน้านี้มีขนาดใหญ่กว่าเพราะตัวของ crond จะไม่ได้รับผลลัพธ์ใด ๆ จากงาน หากคุณต้องการรักษาพฤติกรรมนั้นคุณควรดูที (1)
>>
แทน>
ดังนั้นคุณจะไม่เขียนทับไฟล์บันทึกทุกครั้ง?
| /usr/bin/logger
คุณจะต้องการตามที่ Stefan แนะนำอย่างชาญฉลาด เลือกพิษของคุณ: tldp.org/LDP/abs/html/io-redirection.html
myjob.log
ด้วยขนาด 0 ตามที่คาดไว้ แต่บันทึกไว้ในไฟล์อื่นฉันจะเปลี่ยนการตั้งค่านี้ได้ที่ไหน
หากคุณไม่เห็นอีเมลคุณอาจกำลังรูทสแปม @ yourcompany ด้วยข้อผิดพลาดซึ่งอาจสร้างความรำคาญให้กับผู้ที่ใช้บัญชีนั้นเพื่อตรวจสอบ ลองส่งผลลัพธ์ไปที่ Syslog แทน:
*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag
จากนั้นรอให้ cronjob รันและค้นหาข้อผิดพลาดใน / var / log / messages (หรือ /var/log/user.log ในบางระบบ)
ใช้งานได้ดีกับข้อความแสดงข้อผิดพลาดซึ่งมีความยาวเพียง 1-2 บรรทัดเช่น "yourcronjob: command not found" นอกจากนี้ยังใช้ประโยชน์จากโครงสร้างพื้นฐาน syslog ที่มีอยู่ของคุณ (Logrotation, Central syslogging, Splunk และอื่น ๆ ) นอกจากนี้ยังช่วยลดสแปมอีเมลที่จะรูท
มันอาจไม่ใช่วิธีที่ดีถ้า cronjob ของคุณสร้างเอาต์พุตหลายร้อยบรรทัด
การกำหนดค่าเริ่มต้น cron จะส่งอีเมลพร้อมผลลัพธ์ของโปรแกรมของคุณ หากสิ่งนี้ล้มเหลวคุณสามารถลองห่อโปรแกรมที่ล้มเหลวของคุณในเชลล์สคริปต์เพื่อให้แน่ใจว่าโปรแกรมจะไม่ล้มเหลวและคุณสามารถบันทึกผลลัพธ์เพิ่มเติมได้
นี่คือการตั้งค่าที่กำหนดค่าได้ในการใช้ cron บางตัว
คุณควรได้รับอีเมล์crond
เมื่องานล้มเหลวในการรันหรือเมื่องานส่งคืนโค้ดการออกที่ไม่ใช่ศูนย์ ลองพิมพ์:
$ mailx
ที่พรอมต์คำสั่ง
mailx(1)
เป็นโปรแกรมอ่านจดหมายขั้นพื้นฐานสำหรับทุกระบบของ Unixlike มันเป็นแบบดั้งเดิมโดยมาตรฐานที่ทันสมัย แต่คุณสามารถไว้ใจได้ว่ามันจะมีอยู่เสมอ อื่น ๆ อาจมีเอเจนต์เมลที่ดีกว่า แต่มีเพียงพอที่คุณไม่เคยรู้ว่ามีอันใดติดตั้งอยู่ในเครื่องสุ่มบางอันที่คุณกำลังใช้งานอยู่
โปรดทราบว่าหากคุณไม่ได้กำหนดค่าระบบของคุณเป็นเซิร์ฟเวอร์อีเมลอินเทอร์เน็ตระบบย่อยจดหมายนี้จะใช้ภายในเครื่องเท่านั้น คุณสามารถส่งและรับอีเมลจากผู้ใช้รายอื่นบนเครื่อง แต่คุณอาจไม่สามารถส่งอีเมลออกไปทั่วโลกและอีเมลจากโลกภายนอกจะไม่สามารถมาที่เครื่องของคุณได้
Cron บันทึกข้อมูลพื้นฐานไปยัง/var/log/messages
แต่ส่งเอาต์พุตโปรแกรมใด ๆ ไปยังผู้ใช้ที่เรียกใช้
/var/log/messages
บนเซิร์ฟเวอร์ Ubuntu ของฉัน ( 4.4.0-128-generic #154-Ubuntu SMP
) มีความคิดอะไรไหม ฉันมีงาน cron สองสามงานที่กำหนดไว้ในroot
crontab เป็นเวลาหลายเดือน (เช่นapt autoremove
) แต่ดูเหมือนไม่มีงานใดที่จะถูกประหารชีวิต
ฉันสะดุดในหัวข้อนี้ไม่กี่ปีที่ผ่านมาพบปัญหาเดียวกันและเพิ่งมาเจอวิธีแก้ปัญหาดังกล่าวโดย Ricardo การขาดอีเมลนั้นยากที่จะตรวจจับ (ตามที่คุณพูดถึง) และแน่นอนว่าคุณไม่ต้องการสแปมอีเมลของคุณ @ root ของคุณ หากสนใจตรวจสอบdeadmanssnitch.com . เครื่องมือนี้ดูเหมือนว่าจะแก้ปัญหากรณีดังกล่าว ดูเหมือนจะใช้งานง่าย - เพียงเพิ่มโค้ดที่เครื่องมือให้กับ cronjob ของคุณ หากงานของคุณล้มเหลวในการทำงานในเขตที่ระบุคุณจะได้รับการแจ้งเตือน หากงานของคุณเริ่มทำงานอีกครั้งคุณจะได้รับการแจ้งเตือนด้วย
ฉันใช้vixie-cron
ดังนั้นฉันไม่รู้ว่าสิ่งนี้ใช้ได้กับทุกสิ่งหรือไม่ แต่ฉันมีdead.letter
ไฟล์ที่มีเอาต์พุตทั้งหมดของงาน
ในของฉัน/root/
โฟลเดอร์ฉันได้crons.cron
ซึ่งผมตั้งเป็น crontab crontab /root/crons.cron
ของฉันด้วยการวิ่ง dead.letter
จะถูกสร้างขึ้นใน/root/
เช่นกัน
แก้ไข
ฉันแค่ใช้ Google dead.letter
และเป็นอีเมลที่ไม่สามารถส่งได้ เห็นได้ชัดว่าไม่มีส่วนเกี่ยวข้องกับ cron หากคุณตั้งค่าอีเมลไม่ถูกต้อง (เช่นฉัน) คุณจะมีไฟล์
สำหรับมือใหม่นี่อาจเป็นความเจ็บปวดที่จะดีบั๊ก อย่าสลับค่านาทีและค่าชั่วโมง นาทีมาก่อนจากนั้นชั่วโมง เมื่อคุณให้ค่าน้อยกว่า 12 สำหรับแต่ละค่าจะยอมรับ แต่อาจไม่ทำงานตามที่คาดไว้หรือเลย