《LINUX學習:Linux基礎之-利用shell腳本實現自動監控系統服務》要點:
本文介紹了LINUX學習: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='%s\n%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
本文永遠更新鏈接地址:
維易PHP培訓學院每天發布《LINUX學習:Linux基礎之-利用shell腳本實現自動監控系統服務》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。