Cara Memodifikasi Subjek Email Cronjob

49

Saya menjalankan setengah lusin pekerjaan cron berbeda dari hosting saya di Hostmonster.com. Ketika cronjob telah dieksekusi saya menerima email dengan output dari skrip.

Email datang dalam format:

Dari: Cron Daemon
Subjek: Cron / ramdisk / bin / php5 -c /home5/username/scheduled/optimize_mysql.bash

Masalah dengan ini adalah bahwa subjek dari email membuatnya sangat sulit untuk membaca cronjob email mana yang berkaitan.

Apakah ada cara untuk mengubah subjek email cronjob sehingga lebih mudah dibaca?

Sebagai contoh:

Dari: Cron Daemon
Subjek: Optimalkan Database MySQL
justinl
sumber

Jawaban:

11

Pada sistem saya (kebanyakan Debian) semua output, dari skrip / program yang disebut sebagai entri crontab, dikirim melalui email ke account@localhostsiapa yang memprakarsai cron. Email-email ini memiliki subjek seperti milik Anda.

Jika Anda ingin menerima email, tulis skrip yang tidak memiliki output sendiri. Tetapi alih-alih menempatkan semua output dalam file teks.

Dan dengan

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

Anda menerimanya seperti yang Anda inginkan.

Michèle
sumber
Terima kasih, Michèle. Saya berharap untuk menggunakan sistem email otomatis Hostmonster tetapi sepertinya ini akan menjadi solusi yang saya gunakan. Alih-alih menerima email Cron Otomatis yang dikendalikan oleh hosting saya, saya hanya akan mengirim email saya sendiri.
justinl
54

Atau gunakan perintah sh noop (:)

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

Subjek masih terlihat kludgey, tapi setidaknya itu deskriptif dan tidak memerlukan skrip asing.


sumber
4
Nah, itu hack! (Saya suka.)
Maxy-B
8
Perhatikan bahwa ruang penting setelah titik dua.
Patrick Lupakan
1
Apakah judulnya akan "Ringkasan Antrian"? Dan apakah perintah "qshape" dalam kasus ini?
Pratik Khadloya
Sepertinya qshape adalah perintah postfix. Mesin unix saya menggunakan perintah "mail". Tetapi apakah perintah qshape relevan di sini?
Pratik Khadloya
1
FYI, subjek emailnya adalahQueue Summary; PATH=/usr/sbin qshape
Akom
20

Pipa output pekerjaan cron Anda ke mail secara langsung, dan kemudian Anda dapat mengisi baris subjek. yang 2>&1sintaks mengirimkan keluaran error apapun yang tidak akan hilang.

mycmd 2>&1 | mail -s "mycmd output" myname
Mark Harrison
sumber
2
Saya melakukan ini, tetapi internal panggilan skrip script karena saya ingin subjek untuk mencerminkan keberhasilan atau kegagalan skrip yang sedang dijalankan.
Tom Barron
13

Ambil alih tanggung jawab crond untuk mengirim output perintah (atau tidak jika tidak ada) dengan mem-piping output dan stderr ke 'mailx -E'. Sebagai contoh:

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

Opsi '-E' Mailx bagus karena, seperti halnya crond sendiri, ia tidak akan mengirim email jika tidak ada output untuk dikirim.

Alexis Huxley
sumber
1
Apa variabel $ LOGNAME di sini?
Pratik Khadloya
Apakah ada cara untuk mengirim email hanya ketika kode keluar dari perintah bukan nol?
Pratik Khadloya
1
@PratikKhadloya, from 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
Ada beberapa mailximplementasi; hanya beberapa dari mereka yang menawarkan -Eopsi ini . Di Ubuntu Anda ingin bsd-mailxatau heirloom-mailxpaket; yang mailutilspaket berisi Gnu mailxperintah dengan berbeda satu -E.
Smylers
2

Solusi lain adalah dengan menulis skrip shell dengan baris subjek yang Anda inginkan yang memanggil perintah yang tepat. Dalam contoh Anda, ini akan menjadi:

#Optimize_MySQL_Database.sh

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

Anda dapat memasukkan direktori bin Anda di path dengan mengaturnya di file crontab.

EEAA
sumber
0

COBALAH INI - Di baris perintah mengimplementasikan kode berikut ---

/usr/local/bin/php -q /path /hostname/foldername/Page-You-want-to-execute \
   | **mail -s "*SUBJECT*" [email protected].**
  • Ini hanya referensi untuk membimbing Anda
sudhu
sumber