《LINUX學(xué)習(xí):Linux基礎(chǔ)之-利用shell腳本實(shí)現(xiàn)自動(dòng)監(jiān)控系統(tǒng)服務(wù)》要點(diǎn):
本文介紹了LINUX學(xué)習(xí):Linux基礎(chǔ)之-利用shell腳本實(shí)現(xiàn)自動(dòng)監(jiān)控系統(tǒng)服務(wù),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
目的:監(jiān)控集群內(nèi)nginx及nfs服務(wù)運(yùn)行是否正常,如任一服務(wù)非常,則發(fā)送郵件通知用戶
條件: 1. 主機(jī)及子機(jī)IP地址,hostname已肯定;
2. 主機(jī)與子機(jī)可以或許免密通訊,即基于密匙通訊(相關(guān)命令:ssh-keygen;ssh-copy-id -i web1);
必要的文件:
? 1. python郵件發(fā)送對(duì)象;
2. nfc.sh監(jiān)控腳本,監(jiān)控nginx及nfs服務(wù)狀態(tài),并挪用mail發(fā)送工具通知用戶;
3. nfc-install.sh監(jiān)控部署劇本,運(yùn)行在主機(jī),為子機(jī)配置文件,執(zhí)行命令;
具體代碼:
1. 郵件發(fā)送對(duì)象
將以下代碼創(chuàng)立到“/usr/bin/mail”文件內(nèi),并賦予執(zhí)行權(quán)限(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('郵件發(fā)送成功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:])) #格式處理,專門針對(duì)我們的郵件格式 txt = email.mime.text.MIMEText(content, _charset='utf-8') msg.attach(txt) sendmail(server,port,user,pwd,msg)
python通過(guò)SMTP發(fā)送郵件失敗:
錯(cuò)誤1:smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘)
? ? 我們使用python發(fā)送郵件時(shí)相當(dāng)于自定義客戶端根據(jù)用戶名和暗碼登錄,然后使用SMTP服務(wù)發(fā)送郵件,新注冊(cè)的163郵箱是默認(rèn)不開啟客戶端授權(quán)的(對(duì)指定的郵箱大師客戶端默認(rèn)開啟),因此登錄總是被拒絕,解決辦法(以163郵箱為例):進(jìn)入163郵箱-設(shè)置-客戶端授權(quán)暗碼-開啟(授權(quán)碼是用于登錄第三方郵件客戶端的專用暗碼)
錯(cuò)誤2:smtplib.SMTPAuthenticationError: (535, b‘Error: authentication failed‘)
以163郵箱為例,在開啟POP3/SMTP服務(wù),并開啟客戶端授權(quán)暗碼時(shí)會(huì)設(shè)置授權(quán)碼,將這個(gè)授權(quán)碼代替smtplib.SMTP().login(user,password)方法中的password即可.
2. nfc.sh監(jiān)控劇本
#! /bin/bash #nginx及nfs服務(wù)監(jiān)控腳本,如果非常,將發(fā)送郵件通知 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 #服務(wù)運(yùn)行正常,不發(fā)送郵件通知 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監(jiān)控部署腳本
#! /bin/bash #首先執(zhí)行主機(jī)的nfc.sh服務(wù)監(jiān)控腳本 /root/nfc.sh #然后將主機(jī)的服務(wù)監(jiān)控腳本nfc.sh和發(fā)送郵件文件上傳至web機(jī)器 for i in {134,135,136} do scp /root/nfc.sh 192.168.47.$i:/share/ #將主機(jī)的服務(wù)監(jiān)控腳本nfc.sh上傳至web機(jī)器 scp /usr/bin/mail 192.168.47.$i:/usr/bin/ #將發(fā)送郵件文件上傳至web機(jī)器 ssh root@192.168.47.$i chmod +x /share/nfc.sh #增加nfc腳本文件的執(zhí)行權(quán)限 ssh root@192.168.47.$i chmod +x /usr/bin/mail #增加發(fā)送郵件文件的執(zhí)行權(quán)限 ssh root@192.168.47.$i /share/nfc.sh #執(zhí)行nfc腳本監(jiān)控功效 done ssh 192.168.47.133 #最終回到主機(jī)終端
詳見圖片
成果:
主機(jī)
子機(jī)1
本文永遠(yuǎn)更新鏈接地址:
維易PHP培訓(xùn)學(xué)院每天發(fā)布《LINUX學(xué)習(xí):Linux基礎(chǔ)之-利用shell腳本實(shí)現(xiàn)自動(dòng)監(jiān)控系統(tǒng)服務(wù)》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/13022.html