前言
在公司內(nèi)網(wǎng)有一臺服務器,有動態(tài)的公網(wǎng)IP,使用DDNS對外提供服務,但是會因為停電、服務器卡死等原因?qū)е路掌麟x線。服務器離線后無法及時獲知,因此需要實現(xiàn)在服務器離線的時候能夠發(fā)送消息到手機上。
思路梳理
公司辦理的是聯(lián)通的商務寬帶,有贈送一臺沃云的ECS,但是一直處于閑置狀態(tài),于是就想利用這個ECS去監(jiān)聽服務器的端口,一旦端口無法訪問,就發(fā)送消息到手機上,端口恢復訪問也可以發(fā)送消息到手機上。
具體實施
內(nèi)網(wǎng)服務器配置
開放監(jiān)聽的端口
在內(nèi)網(wǎng)服務器上開放一個端口,用于給公網(wǎng)上的ECS監(jiān)聽。
[root@rsecc ~]# yum -y install nc
[root@rsecc ~]# nc -lk 32768 &
chkconfig管理
因為nc命令會在服務器重啟后退出,因此可以使用chkconfig將nc服務設(shè)置為開機自啟。
[root@rsecc ~]# vim /etc/init.d/ncserver
寫入如下內(nèi)容:
#!/bin/bash
# chkconfig: 3 88 88
/usr/bin/nc -lk 32768 &
配置權(quán)限,并添加到開機自啟。
[root@rsecc ~]# chmod +x /etc/init.d/ncserver
[root@rsecc ~]# chkconfig --add ncserver
[root@rsecc ~]# chkconfig --list ncserver
ncserver 0:off 1:off 2:off 3:on 4:off 5:off 6:off
這樣的話,當服務器重啟后,nc命令也會隨著服務器啟動。
防火墻配置
還需要在防火墻上放行對應的端口。
[root@rsecc ~]# firewall-cmd --add-port=32768/tcp
[root@rsecc ~]# firewall-cmd --reload
公網(wǎng)ECS配置
編寫python腳本
編寫python腳本來實現(xiàn)功能,并將python腳本設(shè)置為開機自啟。
導入需要使用的模塊,這里使用了 socket、time、json、requests 四個模塊。
import socket
import time
import requests
import json
編寫發(fā)送消息的函數(shù)模塊,我這里使用的是企業(yè)微信的webhook機器人,也可以使用釘釘、郵箱、短信等方式發(fā)送消息。
webhook = "webhook地址鏈接"
#webhook發(fā)送消息
def send_text(webhook, content):
header = {
"Content-Type": "application/json",
"Charset": "UTF-8"
}
data ={
"msgtype": "text",
"text": {
"content": content
}
}
data = json.dumps(data)
info = requests.post(url=webhook, data=data, headers=header)
編寫判斷服務器狀態(tài)的函數(shù)模塊。這里使用的Python中的Socket標準庫,通過構(gòu)建一個TCP連接的Socket對象,使用connect_ex()方法連接服務器,如果連接無異常返回的狀態(tài)碼為0。通過判讀返回的狀態(tài)碼是否為0來判斷服務器是否在線。
def check_server_connection(server, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((server, port))
if result == 0:
service_status = "on"
return service_status
else:
service_status = "off"
return service_status
編寫一個while死循環(huán),通過判斷狀態(tài)碼是否發(fā)生改變,來實現(xiàn)發(fā)送消息的效果。
service_status = "off"
prev_service_status = "off"
while True:
service_status = check_server_connection("服務器地址", 32768)
if prev_service_status != service_status:
if service_status == "off":
content = "服務器已離線!"
send_text(webhook, content)
else:
content = "服務器已上線!"
send_text(webhook, content)
prev_service_status = service_status
time.sleep(60)
設(shè)置為開機自啟。
實現(xiàn)方式和內(nèi)網(wǎng)服務器一樣,使用ckhconfig命令。
[root@rsecc ~]# vim /etc/init.d/ncserver
寫入如下內(nèi)容:
#!/bin/bash
# chkconfig: 3 88 88
/usr/bin/python3 /opt/serveron.py &
配置權(quán)限,并添加到開機自啟。
[root@rsecc ~]# chmod +x /etc/init.d/ncserver
[root@rsecc ~]# chkconfig --add ncserver
[root@rsecc ~]# chkconfig --list ncserver
ncserver 0:off 1:off 2:off 3:on 4:off 5:off 6:off
這樣的話,當服務器重啟后,python腳本也會隨著服務器啟動。
效果
總結(jié)
至此,通過一個簡易的腳本即可實現(xiàn)服務器的狀態(tài)監(jiān)控。文章來源:http://www.zghlxwxcb.cn/news/detail-758906.html
? 版權(quán)聲明
文章:使用Python監(jiān)控服務器在線狀態(tài)
作者:Guangran
鏈接:https://www.rsecc.cn/955.html
聲明:如無特別說明本文即為原創(chuàng)文章僅代表個人觀點,版權(quán)歸《廣然筆記》所有,未經(jīng)授權(quán)、請勿轉(zhuǎn)載。文章來源地址http://www.zghlxwxcb.cn/news/detail-758906.html
到了這里,關(guān)于使用Python監(jiān)控服務器在線狀態(tài)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!