วิธีการปรับเปลี่ยนหัวเรื่องอีเมล Cronjob


49

ฉันใช้งาน cron ที่แตกต่างกันครึ่งโหลจากโฮสติ้งของฉันที่ Hostmonster.com เมื่อ cronjob ได้รับการดำเนินการฉันจะได้รับอีเมลพร้อมเอาต์พุตของสคริปต์

อีเมลมาในรูปแบบของ:

จาก: Cron Daemon
เรื่อง: Cron / ramdisk / bin / php5 -c /home5/username/scheduled/optimize_mysql.bash

ปัญหาของเรื่องนี้คือหัวเรื่องของอีเมลทำให้อ่านยากซึ่ง cronjob นั้นเกี่ยวข้องกับอีเมล

มีวิธีในการแก้ไขหัวเรื่องของอีเมล cronjob หรือไม่เพื่อให้อ่านง่ายขึ้น?

ตัวอย่างเช่น:

จาก: Cron Daemon
Subject: เพิ่มประสิทธิภาพฐานข้อมูล MySQL

คำตอบ:


11

ในระบบของฉัน (เดเบียนส่วนใหญ่) เอาต์พุตทั้งหมดจากสคริปต์ / โปรแกรมที่เรียกว่ารายการ crontab จะถูกส่งทางอีเมลไปยังaccount@localhostผู้ที่เริ่ม cron อีเมลเหล่านี้มีหัวเรื่องเหมือนของคุณ

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

และด้วย

mail -s 'your subject' adress@where < textfile

คุณได้รับในแบบที่คุณต้องการ


ขอบคุณMichèle ฉันหวังว่าจะใช้ระบบอีเมลอัตโนมัติของ Hostmonster แต่ดูเหมือนว่านี่จะเป็นวิธีแก้ปัญหาของฉัน แทนที่จะได้รับอีเมลอัตโนมัติ Cron ที่ควบคุมโดยโฮสติ้งของฉันฉันจะส่งอีเมลของตัวเอง
justinl

53

หรือใช้คำสั่ง sh noop (:)

0 9-17 * * 1-5    : Queue Summary; PATH=/usr/sbin qshape

หัวเรื่องยังคงมีลักษณะ kludgey แต่อย่างน้อยก็เป็นคำอธิบายและไม่ต้องการสคริปต์ภายนอก


4
ตอนนี้แฮ็ค! (ฉันชอบมัน)
Maxy-B

8
โปรดทราบว่าพื้นที่มีความสำคัญหลังเครื่องหมายจุดคู่
แพทริคลืม

1
ชื่อจะเป็น "สรุปคิว" หรือไม่ และคำสั่ง "qshape" ในกรณีนี้คืออะไร?
Pratik Khadloya

ดูเหมือนว่า qshape เป็นคำสั่ง postfix เครื่องยูนิกซ์ของฉันใช้คำสั่ง "mail" แต่คำสั่ง qshape เกี่ยวข้องกันที่นี่หรือไม่
Pratik Khadloya

1
FYI หัวเรื่องของอีเมลจะเป็นQueue Summary; PATH=/usr/sbin qshape
Akom

20

ไพพ์เอาต์พุตงาน cron ของคุณไปยังเมลโดยตรงและจากนั้นคุณสามารถกรอกในหัวเรื่อง 2>&1ไวยากรณ์ส่งออกข้อผิดพลาดใด ๆ ซึ่งจะหายไป

mycmd 2>&1 | mail -s "mycmd output" myname

2
ฉันกำลังทำสิ่งนี้ แต่สคริปต์โทรภายในของ cron เพราะฉันต้องการให้หัวเรื่องแสดงถึงความสำเร็จหรือความล้มเหลวของสคริปต์ที่กำลังทำงานอยู่
Tom Barron

13

รับช่วงต่อความรับผิดชอบของ crond ในการส่งเอาต์พุตคำสั่ง (หรือไม่ถ้าไม่มี) โดยไพพ์เอาท์พุทและ stderr เป็น 'mailx -E' ตัวอย่างเช่น:

0 * * * * your-command 2>&1 | mailx -E -s "Descriptive Subject" $LOGNAME

ตัวเลือก '-E' ของ Mailx นั้นดีเพราะเหมือนกับตัวของมันเองมันจะไม่ส่งเมลหากไม่มีเอาต์พุตที่จะส่ง


1
ตัวแปร $ LOGNAME ที่นี่คืออะไร
Pratik Khadloya

มีวิธีการส่งอีเมลเฉพาะเมื่อรหัสออกของคำสั่งไม่ใช่ศูนย์หรือไม่
Pratik Khadloya

1
@PratikKhadloya จาก crontab (5): Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. PATH is set to "/usr/bin:/bin". HOME, SHELL, and PATH may be overridden by settings in the crontab; LOGNAME is the user that the job is running from, and may not be changed.
lingfish

2
มีmailxการใช้งานหลายอย่าง มีเพียงบางคนเท่านั้นที่เสนอ-Eตัวเลือกนี้ บน Ubuntu คุณต้องการbsd-mailxหรือheirloom-mailxแพ็คเกจ; mailutilsแพคเกจประกอบด้วย Gnu คำสั่งที่มีความแตกต่างกันmailx -E
ออกแบบ Smylers

2

อีกวิธีคือการเขียนเชลล์สคริปต์ด้วยบรรทัดหัวเรื่องที่คุณต้องการให้เรียกคำสั่งที่ถูกต้อง ในตัวอย่างของคุณนี่จะเป็น:

#Optimize_MySQL_Database.sh

/ramdisk/bin/php5 -c /home5/username/scheduled/optimize_mysql.bash

คุณสามารถรวมไดเรกทอรี bin ของคุณในเส้นทางโดยการตั้งค่าในไฟล์ crontab


0

ลองวิธีนี้ - ในบรรทัดคำสั่งจะใช้โค้ดต่อไปนี้ ---

/usr/local/bin/php -q /path /hostname/foldername/Page-You-want-to-execute \
   | **mail -s "*SUBJECT*" YOUR@MAIL.COM.**
  • นี่เป็นเพียงการอ้างอิงเพื่อแนะนำคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.