2021-05-12 14:32:11
Linux基礎之-利用shell指令碼實現自動監控系統服務
目的:監控叢集內nginx及nfs服務執行是否正常,如任一服務異常,則傳送郵件通知使用者
條件: 1. 主機及子機IP地址,hostname已確定;
2. 主機與子機能夠免密通訊,即基於密匙通訊(相關命令:ssh-keygen;ssh-copy-id -i web1);
需要的檔案:
1. Python郵件傳送工具;
2. nfc.sh監控指令碼,監控nginx及nfs服務狀態,並呼叫mail傳送工具通知使用者;
3. nfc-install.sh監控部署指令碼,執行在主機,為子機組態檔,執行命令;
詳細程式碼:
1. 郵件傳送工具
將以下程式碼建立到“/usr/bin/mail”檔案內,並賦予執行許可權(chmod +x /usr/bin/mail)
#!/usr/bin/python # -*- coding: UTF-8 -*- import sys import smtplib import email.mime.multipart import email.mime.text server = 'smtp.163.com' port = '25' def sendmail(server,port,user,pwd,msg): smtp = smtplib.SMTP() smtp.connect(server,port) smtp.login(user, pwd) smtp.sendmail(msg['from'], msg['to'], msg.as_string()) smtp.quit() print('郵件傳送成功email has send out !') if __name__ == '__main__': msg = email.mime.multipart.MIMEMultipart() msg['Subject'] = 'check your service of nginx and nfs' msg['From'] = 'python4_mail@163.com' msg['To'] = 'python4_recvmail@163.com' user = 'python4_mail' pwd = '123456789' content='%sn%s' %('n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式處理,專門針對我們的郵件格式 txt = email.mime.text.MIMEText(content, _charset='utf-8') msg.attach(txt) sendmail(server,port,user,pwd,msg)
python通過SMTP傳送郵件失敗:
錯誤1:smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘)
我們使用python傳送郵件時相當於自定義用戶端根據使用者名稱和密碼登入,然後使用SMTP服務傳送郵件,新註冊的163郵箱是預設不開啟用戶端授權的(對指定的郵箱大師用戶端預設開啟),因此登入總是被拒絕,解決辦法(以163郵箱為例):進入163郵箱-設定-用戶端授權密碼-開啟(授權碼是用於登入第三方郵件用戶端的專用密碼)
錯誤2:smtplib.SMTPAuthenticationError: (535, b‘Error: authentication failed‘)
以163郵箱為例,在開啟POP3/SMTP服務,並開啟用戶端授權密碼時會設定授權碼,將這個授權碼代替smtplib.SMTP().login(user,password)方法中的password即可。
2. nfc.sh監控指令碼
#! /bin/bash #nginx及nfs服務監控指令碼,如果異常,將傳送郵件通知 function monitor_nfc() { systemctl status nginx nginx=$? systemctl status nfs nfs=$? clear if [ $nginx -eq 0 ] && [ $nfs -eq 0 ] then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig |awk 'NR==2{print $2}') MSG:nginx.service and nfs.service is both running" echo msg # /usr/bin/mail $msg #服務執行正常,不傳送郵件通知 elif [ $nginx -ne 0 ] && [ $nfs -eq 0 ] then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig |awk 'NR==2{print $2}') MSG:nginx.service is dead,nfs.service is running" echo $msg /usr/bin/mail $msg elif [ $nginx -ne 0 ] && [ $nfs -ne 0 ] then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig |awk 'NR==2{print $2}') MSG:nginx.service and nfs.service is both dead" echo $msg /usr/bin/mail $msg elif [ $nginx -eq 0 ] && [ $nfs -ne 0 ] then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig |awk 'NR==2{print $2}') MSG:nginx.service is running,nfs.service is dead" echo $msg /usr/bin/mail $msg fi } monitor_nfc &>> /tmp/monitor.log
3. nfc-install監控部署指令碼
#! /bin/bash #首先執行主機的nfc.sh服務監控指令碼 /root/nfc.sh #然後將主機的服務監控指令碼nfc.sh和傳送郵件檔案上傳至web機器 for i in {134,135,136} do scp /root/nfc.sh 192.168.47.$i:/share/ #將主機的服務監控指令碼nfc.sh上傳至web機器 scp /usr/bin/mail 192.168.47.$i:/usr/bin/ #將傳送郵件檔案上傳至web機器 ssh root@192.168.47.$i chmod +x /share/nfc.sh #增加nfc指令碼檔案的執行許可權 ssh root@192.168.47.$i chmod +x /usr/bin/mail #增加傳送郵件檔案的執行許可權 ssh root@192.168.47.$i /share/nfc.sh #執行nfc指令碼監控功能 done ssh 192.168.47.133 #最終回到主機終端
詳見圖片
結果:
主機
子機1
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-05/144222.htm
相關文章