cron สามารถเขียนเอาต์พุตงานไปยังบันทึก * โดยค่าเริ่มต้น * (แทนเมล) ได้หรือไม่?


23

เราทุกคนรู้วิธีที่ถูกต้องในการจัดการผลผลิตจากงาน cron คือการเปลี่ยนเส้นทางไปยังไฟล์:

0 * * * * /bin/date >> /var/log/date.log 2>&1

อย่างไรก็ตามบางครั้งผู้ดูแลระบบจะขี้เกียจลืมหรือไม่รู้และไม่ใส่ในการเปลี่ยนเส้นทางเหล่านั้น ในกรณีนี้ผลลัพธ์ของงานจะถูกส่งไปยัง $ MAILTO หรือผู้ใช้ที่เป็นเจ้าของหรือรูต ในกล่องที่ฉันจัดการบางส่วนอีเมลจะถูกปิดการใช้งานดังนั้นผลลัพธ์นี้จะเข้าสู่หลุมดำ สิ่งที่ฉันสงสัยคือมีวิธีใดที่จะบอก cron ให้รับงานใด ๆ และแทนที่จะส่งจดหมายให้โยนมันลงในแฟ้มบันทึก catch-all ฉันใช้ Ubuntu (8.04 แต่ย้ายไปเป็น 9.04) มีคำใบ้ของวิธีแก้ปัญหาเช่นนี้ในผลลัพธ์แบบสุ่มของ Googleแต่ฉันคิดว่า OP อาจสับสนเกี่ยวกับเอาต์พุต cron เทียบกับผลลัพธ์ของงาน cron

ฉันเปิดให้โซลูชั่นที่เกี่ยวข้องกับการเขียนสคริปต์หรือการแฮ็ก แต่ในอุดมคตินี้จะเป็นบิตการกำหนดค่าที่ฉันสามารถตั้งค่าได้ที่ไหนสักแห่ง ฉันไม่เห็นคำแนะนำใด ๆ man cronใน ขอบคุณ!

คำตอบ:


1

สำหรับcroniecron (ซึ่งแนะนำโดย Gentoo Handbook) มีอาร์กิวเมนต์ "-s" ในการเรียก cron ซึ่งจะส่งเอาต์พุตงานไปยังบันทึกของระบบโดยใช้ syslog


3

คำตอบสั้น ๆ คือไม่ cron ส่งอีเมลถึงเจ้าของ crontab โดยการออกแบบ ใน cron มาตรฐานไม่มีวิธีที่จะเปลี่ยนแปลงสิ่งนี้

สิ่งที่ดีที่สุดที่ฉันคิดคือการกำหนดค่า MTA บนเครื่องที่คุณต้องการให้พฤติกรรมนี้ถ่ายโอนเมลในไฟล์บันทึกแทนกล่องจดหมายของผู้ใช้


3

ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงเมื่อคุณพูดว่า "จดหมายถูกปิดใช้งาน" แต่บางทีคุณสามารถตั้งชื่อแทนใน/etc/aliasesที่ถูกนำไปยังไปป์? สิ่งที่ต้องการ

root: "|/bin/cat >> /var/log/cron.log"

root: /var/log/cron.logไม่ทำงานใช่ไหม feep.net/sendmail/tutorial/intro/aliases.html
endolith

ไม่ทำอะไรเลยสำหรับฉัน
endolith

สิ่งเหล่านี้อาจใช้ได้ถ้าคุณใช้ sendmail เป็น MTA ของคุณ นี่เป็นเรื่องธรรมดาน้อยลง (ใช่ฉันรู้ว่าฉันกำลังตอบกลับความคิดเห็น 5 ปี!)
Alex L

2

ฉันไม่คิดว่าสิ่งที่คุณขอเป็นไปได้จริงกับ cron Ubuntu (หรืออื่น ๆ )

นอกจากแนวคิด geekmonkeys แล้วคุณยังสามารถตั้งค่า$ MAILTOเป็นบัญชีท้องถิ่นและกำหนดเส้นทางของผลลัพธ์ผ่าน procmail


1

ไม่เคยได้ยินการตั้งค่าสำหรับ cron ดังนั้นฉันจะใช้เส้นทางสคริปต์

สร้างงาน cron เพื่อลาดตระเวน / var / spool / cron / * และผนวกการเปลี่ยนเส้นทางไปยังงานใด ๆ ที่ไม่มี


1

อีกทางเลือกหนึ่งคือการสร้างเชลล์สคริปต์ชื่อ cron_wrapper หรืออะไรบางอย่างและให้มันทำสิ่งนี้:

#! / bin / ดวลจุดโทษ

eval "$ * >> /var/log/cronlog.log"
ออกจาก $ หรือไม่

จากนั้น crontabs ทั้งหมดของคุณเพียงต้องการสิ่งนี้:

* * * * * / usr / local / bin / cron_wrapper สะท้อนเสียงสวัสดี

หมายเหตุฉันยังไม่ได้ทดสอบโค้ดนี้เป็นเพียงแนวคิด


1
ไม่ได้แก้ปัญหา หากผู้คนจำไม่ได้ว่าจะตั้งค่า MAILTO หรือเปลี่ยนเส้นทาง stdout ไปที่ไฟล์พวกเขาจะไม่จำที่จะเรียกใช้ข้อมูลผ่าน wrapper
Kamil Kisiel

1

ฉันไม่รู้ว่า "cron มาตรฐาน" คืออะไร มี cron daemons มากมาย distros ต่าง ๆ ใช้ต่างกัน Vixie cron ถูกนำไปใช้อย่างกว้างขวางที่สุดดังนั้นนั่นอาจเป็นสิ่งที่คุณหมายถึง แต่ในบาง distros มันจะไม่เริ่มต้น

ฉันได้ควบคุมDron 's cron (dcron) ซึ่งเป็นค่าเริ่มต้นบน Arch Linux Distros อื่นก็ใช้เหมือนกัน แต่ฉันไม่รู้ว่ามันเป็นค่าเริ่มต้นที่อื่นหรือเปล่า dcron มีตัวเลือกการเรียกใช้-Mเพื่อระบุว่าคุณต้องการใช้สคริปต์ที่กำหนดเองแทน sendmail สคริปต์ได้รับการเรียกโดยไม่มีข้อโต้แย้งและมีส่วนหัวอีเมลไม่กี่รายการและ&>เอาต์พุตของ cronjobs ใด ๆ ที่เป็น stdin (หากไม่มี&>เอาต์พุตสคริปต์จะไม่ถูกเรียก)


1

ทำไมเราไม่ตั้ง MAILTO = "" ใน crontab ของผู้ใช้โดยเฉพาะ วิธีนี้จะปิดใช้งานการบันทึกข้อความเมลใน / var / spool / mail /

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.