做运维的都知道,最怕的不是机器直接挂掉,而是怕机器hang在那里,能ping通但是又登录不上去。周末加班写了个检测脚本,发送icmp包进行ping的检查,如果有返回再继续做ssl端口的检查或者ssh登录的检查。python不像perl下直接有个很好用的net::ping,自己网上找了个python-ping,修改了一下放脚本里面直接用。
#!/usr/bin/env python2.7 import socket import sys import paramiko import os import select import struct import time import threading import Queue import copy import string import hashlib from collections import deque ICMP_ECHO_REQUEST = 8 # Seems to be the same on Solaris. class CheckHang: def init(self,server): self.server=server def check_ssh(self): """ return 1 when i can’t ssh to the server """ ssh = paramiko.SSHClient() key = paramiko.RSAKey.from_private_key_file("/home/pm/keys/id_rsa") ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(self.server,username=“root”,pkey=key,timeout=1)
flag=1 ssh.close() except: flag=0 return flag def check_ssh_port(self,port): """ check the 22 port alive, return 1 when the port is alive. """ port_test = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: port_test.settimeout(1)
...