實驗環境:centos 6.8
所需軟件:mailx或msmtp或smtpEmail等 smtp客戶端程序
所需帳號:我這使用的是163郵箱。
本方案優點:安裝軟件少,無須啟動postfix等郵件服務。無須配置postfix郵件服務。由于調用的是注冊郵箱,所以也不會給移入到垃圾郵件中。
建議:生產中,不管是什么服務發送郵件的建議使用外部smtp帳號,不會導致移入到垃圾郵件列表中。
需求環境:由于我們線上腳本過多,而且也沒有報警警告,所以無法獲取其執行情況。導致最后老板發現,結果懂的。
然后與開發溝通,運維這邊無法保證腳本的邏輯性錯誤,只能保證代碼是否執行。代碼邏輯性錯誤需要在腳本中判斷并STDERR輸出。
我是安裝的mailx來實現的,過程簡單。
安裝mailx:yum -y install mailx
安裝完成后會生成mail命令。
執行一次mail命令會生成 /etc/mail.rc 文件。
編輯/etc/mail.rc 在最后一行添加
set from=FromUser@163.com
set smtp=smtp.ym.163.com
set smtp-auth-user=AuthUser@163.com
set smtp-auth-password=PASSWORD
set smtp-auth=login
測試是否正常收發郵件
echo "123456" | mail -s "報警" AuthUser@163.com
如果正常,那么就會收到一份郵件
配置腳本:
mv /usr/sbin/sendmail{,.bak}vim /usr/sbin/sendmail #!/bin/bash # MAIL=`cat -` echo $MAIL | mail -s "警告" AuthUser@163.com
配置完成。
測試:
crontab -e*/1 * * * * echo "1"
添加一行輸出,那么1分鐘后就可以收到報警郵件了。
原理:
crond計劃任務執行任務后,標準輸出,錯誤輸出都會輸入到屏幕。
如果定義了MAILTO變量(在/etc/crontab已經定義),就會調用/usr/sbin/sendmail發送郵件。
crond傳遞格式如下:
From: root (Cron Daemon) To: root Subject: Cron <root@opsnote> echo "1" Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generatedX-Cron-Env: <LANG=en_US.UTF-8> X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/root> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=root> X-Cron-Env: <USER=root> 1
那個腳本的的作用就是截取這些內容,然后調用mail命令將這些內容發送出去。
思路提供完畢。希望能舉一反三。
如有疑問可以聯系:root@opsnote.com
原創文章,作者:SSA,如若轉載,請注明出處:http://www.www58058.com/23256