linux下使用smtp+shell腳本實現服務器存活狀態監控

簡單郵件傳輸協議 (Simple Mail Transfer Protocol, SMTP) 是在Internet傳輸email的事實標準,
SMTP是一個相對簡單的基於文本的協議。在其之上指定了一條消息的一個或多個接收者,而後消息文本會
被傳輸。SMTP使用TCP端口25。
1、配置環境
[root@ser ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
#查看系統環境
[root@ser ~]# systemctl stop firewalld
#中止firewall防火牆服務
[root@ser ~]# systemctl disable firewalld
#禁止firewall防火牆服務開機自動啓動功能
[root@ser ~]# firewall-cmd --state
not running
#查看防火牆運行狀態,確認防火牆被關閉。
vi /etc/selinux/config
#SELINUX=enforcing
#SELINUXTYPE=targeted
SELINUX=disabled
:wq! 
#關閉selinux,保存退出
[root@ser ~]# setenforce 0
#臨時關閉selinux,重啓失效
[root@ser ~]# getenforce
Disabled
#查看selinux狀態,確認已關閉
2、下載軟件,並安裝相關依賴的perl組件
[root@ser ~]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL
#安裝依賴
[root@ser ~]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
#下載安裝包
[root@ser ~]# tar -zxf sendEmail-v1.560.tar.gz
#解壓安裝包
[root@ser ~]# cd sendEmail-v1.56/
[root@ser sendEmail-v1.56]# ls
CHANGELOG  README  README-BR.txt  sendEmail  sendEmail.pl  TODO
#進入目錄sendEmail-v1.56/
[root@ser sendEmail-v1.56]# cp sendEmail /usr/local/bin/sendEmail
[root@ser sendEmail-v1.56]# chown root:root /usr/local/bin/sendEmail
[root@ser sendEmail-v1.56]# ll /usr/local/bin/sendEmail 
-rwxr-xr-x 1 root root 80183 Jul 31 15:14 /usr/local/bin/sendEmail
#將sendEmail複製到執行目錄/usr/local/bin/下,並賦予root用戶權限、屬組權限
3、建立腳本並賦予腳本執行權限
[root@ser ~]# cd
[root@ser ~]# pwd
/root
#返回/root
[root@ser ~]# vim mail.sh
#!/bin/bash
to=$1
subject=$2
body=$3
/usr/local/bin/sendEmail -o tls=auto  -f ******@qq.com -t "$to" -s smtp.qq.com -u "$subject" 
-o message-content-type=html -o message-charset=utf8 -xu ******@qq.com -xp ****** -m "$body"
#腳本中  -f ********@qq.com表示發件人郵箱,-s smtp.qq.com 表示郵件的smtp服務器
#本文中使用騰訊qq郵箱,使用其餘郵箱服務器須要修改
# -xu ********@qq.com 表示發件人郵箱的用戶名,-xp ********表示郵件協議受權密鑰
[root@ser ~]# chmod +x mail.sh
#執行腳本測試發送郵件
[root@ser ~]# ./mail.sh chao.il@qq.com test 123
        test
        發件人:**<********@qq.com>     
        時   間:2019年9月12日(星期四) 下午3:50 (UTC+0:00 倫敦、都柏林、里斯本時間)    
        收件人:** <********@qq.com>
        123
        #收到的測試郵件
4、常見問題及處理:
一、當進行郵件測試時,出現invalid SSL_version ******/IO/Socket/SSL.pm line 444這樣的報錯時,
緣由是sendEmail軟件和perl裏面的SSL版本不兼容致使,經過修改/usr/local/bin/sendEmail文件第
1906行,不指定SSL版本,原始文件爲  if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version
=> ‘SSLv3 TLSv1‘)) {     更改後爲  if (! IO::Socket::SSL->start_SSL($SERVER)) {
二、當進行郵件測試,出現ERROR => SMTP-AUTH: Authentication to smtp.qq.com:25 failed這樣
的報錯時,緣由是郵箱要求使用第三方客戶端發送郵件是必須使用受權碼登陸的,使用賬號密碼驗證時,授
權碼須要登陸郵箱設置中查找,有些郵件服務器須要先開啓POP3服務。
5、編寫shell腳本進行服務器在線狀態監控
[root@ser ~]# vim CheckNetwork.sh 
#!/bin/bash
tt1=172.20.220.20     
#定義服務器一
tt2=172.20.11.1         
#定義服務器二
while true
#while(true)是一個無窮循環語句  
#咱們必須在他的循環語句內部加入一個判斷,當他達到了什麼要求就會跳出
do
        ping -c 5 $tt1 >/dev/null
                    #用ping命令來探測遠程機是否存活
                    if [ $? -eq 0 ];then
                    #shell腳本中$?是指上一次命令執行的成功或者失敗的狀態。若是成功就是0,失敗爲1。
                    #語句if [ $? -eq 0 ] 是判斷if語句的上一個命令執行若是失敗就執行if中的語句,不然就執行else中的內容。

                            echo `date +%F-%T` "  $tt1 is yes" >> ip_yes.txt
                            #追加當前時間和服務器IP is yes 到ip_yes.txt,此處ip_yes.txt用作正確日誌文件 
                    else
                            echo `date +%F-%T` "  $tt1 is Error" >> ip_no.txt
                            #追加當前時間和服務器IP is Error到ip_no.txt,此處ip_no.txt用作錯誤日誌文件
                            /root/mail.sh ********@qq.com 服務器錯誤 `date +%F-%T`----"愛普 $tt1 is Error" 
                            /root/mail.sh ********@qq.com 服務器錯誤 `date +%F-%T`----"愛普 $tt1 is Error" 
                            /root/mail.sh ********@sunplusapp.com 服務器錯誤 `date +%F-%T`----"愛普 $tt1 is Error" 
                            /root/mail.sh ********@sunplusapp.com 服務器錯誤 `date +%F-%T`----"愛普 $tt1 is Error"
                            #發送郵件給以上的郵件地址
        sleep 5
        #休眠5秒
fi
        ping -c 5 $tt2 >/dev/null
                    if [ $? -eq 0 ];then    
                            echo `date +%F-%T` "  $tt2 is yes" >> ip_yes.txt
                    else
                            echo `date +%F-%T` "  $tt2 is Error" >> ip_no.txt 
                            /root/mail.sh ********@qq.com 服務器錯誤 `date +%F-%T`----"益輝 $tt2 is Error"
                            /root/mail.sh ********@qq.com 服務器錯誤 `date +%F-%T`----"益輝 $tt2 is Error"
                            /root/mail.sh ********@sunplusapp.com 服務器錯誤 `date +%F-%T`----"益輝 $tt2 is Error"
                            /root/mail.sh ********@sunplusapp.com 服務器錯誤 `date +%F-%T`----"益輝 $tt2 is Error"
        sleep 5
fi
        kill -9 `ps aux | grep CheckNetwork | grep -v grep | awk '{print $2}'`
        #執行腳本後,殺死此腳本的進程,防止重複執行腳本。
done    
[root@ser ~]# crontab -l
*/15 8-18 * * * /usr/bin/bash /root/CheckNetwork.sh
#設置定時任務,8點到18點每15分鐘執行CheckNetwork.sh。(時間請根據需求設定)
下面爲報警郵件信息
        服務器錯誤
        發件人:** <********@qq.com>        
        時   間:2019年9月12日(星期四) 下午4:45 (UTC+0:00 倫敦、都柏林、里斯本時間) 
        收件人:** <********@qq.com>
        2019-09-12-12:45:19----益輝 172.20.11.1 is Error
以上就是使用stmp+shell實現簡單的服務器存活狀態監控。
博主小白,歡迎各位指出不足和改進意見,感謝觀看。
相關文章
相關標籤/搜索