/etc/cron.daily/foo: ส่งอีเมลไปยังผู้ใช้เฉพาะแทนที่จะเป็นรูทหรือไม่


13

ฉันใช้ CentOS 5.5

เรามี cronjobs หลายอันใน /etc/cron.daily/ เราต้องการอีเมลสำหรับ cronjobs เหล่านี้เพื่อไปยังที่อยู่อีเมลที่เฉพาะเจาะจงในขณะที่อีเมลที่เหลือใน /etc/cron.daily/ ควรไปที่ที่อยู่อีเมลเริ่มต้น (root @ localhost)

Cronjobs ใน /etc/cron.daily/ ถูกเรียกใช้จากไฟล์ / etc / crontab / etc / crontab ระบุฟิลด์ 'MAILTO' ฉันสามารถลบล้างสิ่งนี้โดยการตั้งค่า MAILTO ใน /etc/cron.daily/foo cronjob ของฉันได้ไหม

วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร?


หมายเหตุสำหรับผู้ใช้ CentOS 6.5 (cronie): /etc/crontabไม่ได้ระบุค่าเริ่มต้น
Adam Monsen

คำตอบ:


13

การตั้งค่าMAILTO=user@example.orgใน/etc/cron.daily/fooไม่ทำงาน เอาต์พุตสคริปต์ไม่ถูกส่งไปที่ user@example.org

หน้าเว็บที่http://www.unixgeeks.org/security/newbie/unix/cron-1.htmlยังแนะนำวิธีแก้ปัญหาที่ง่าย:

ไฟล์/etc/cron.daily/fooนี้มีดังต่อไปนี้:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

การดำเนินการนี้จะส่งอีเมลไปที่ 'stefanl@example.org' พร้อมหัวเรื่องที่เท่ากับเส้นทางแบบเต็มของสคริปต์ (เช่น/etc/cron.daily/foo)

นี่คือสิ่งที่ Unixgeeks.org พูดเกี่ยวกับสิ่งนี้:

ผลผลิตจาก cron

อย่างที่ฉันได้บอกไปแล้วผลลัพธ์จาก cron จะถูกส่งไปยังเจ้าของกระบวนการหรือบุคคลที่ระบุในตัวแปร MAILTO แต่ถ้าคุณไม่ต้องการมัน หากคุณต้องการส่งออกทางไปรษณีย์ไปยังคนอื่นคุณสามารถส่งออกไปยังคำสั่ง mail เช่น

cmd | เมล -s "หัวเรื่องของเมล" ผู้ใช้

บางครั้งฉันต้องการได้รับข้อผิดพลาดจาก cronjob ไม่ใช่ stdout ดังนั้นฉันจึงใช้เคล็ดลับนี้ ไวยากรณ์อาจดูผิดในครั้งแรก แต่มั่นใจได้ว่าใช้งานได้ cronjob ต่อไปนี้จะส่ง STDOUT ไปที่ / dev / null และจะจัดการ STDERR ผ่านไปป์ไลน์

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

สิ่งเดียวกัน แต่ส่งไปยัง syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

ดูคำตอบของฉันใน ServerFault ถึงCronjob stderr ไปที่ไฟล์และอีเมล


6

ทางออกที่หรูหรากว่าคือการใช้/etc/cron.dโดยตรง แทนที่จะเขียนสคริปต์ของคุณ/etc/cron.dailyให้วางไว้ที่อื่น/usr/local/sbin/myscript.shแล้วสร้างไฟล์/etc/cron.d/myscriptเป็น:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

สิ่งนี้ยังช่วยให้คุณควบคุมได้มากขึ้นเมื่องานเกิดขึ้น เช่นในบางวันธรรมดาเป็นต้นดูข้อมูลเพิ่มเติมจากcrontab(5)ชายคนนั้น


0

สมมติว่าคุณมีสิทธิ์เข้าถึง SA บนเครื่องนี้คุณสามารถสร้างบัญชีผู้ใช้ใหม่เพิ่มงานลงในงาน cron ของบัญชีนี้ เมลสำหรับผู้ใช้นี้สามารถส่งต่อโดยใช้ไฟล์. forward ในโฟลเดอร์โฮมของบัญชีนี้ คุณอาจต้องตั้งค่าการอนุญาตสำหรับผู้ใช้นี้หากงาน cron ต้องการการเข้าถึงแบบส่วนตัว

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

โชคดี

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