一個網站故障排查的、程式碼更新的簡便指令碼

lcc發表於2021-09-09


故障排錯指令碼

由於近來公司的伺服器經常會出點小問題,基於各種原因要去排錯。這裡我用python寫了一個指令碼,主要四呼叫os模組操作。有一個是要統計mysql最大連線數的。因為好像python不支援"show processlist",所以自己寫了一個模組mysqlconn.py。放在/python目錄下。這個模組的作用主要是執行“sh /python/mysqlconn.sh”.這個指令碼。然後指令碼會生成一個叫mysqlconn.txt檔案放到:/python/mysqlconn.txt下面。主要是統計當前連線數。和mysql預設允許的最大連線數。

最後一個要說的就是,我的程式碼更新目錄是:/www/zhs/tool(測試環境)。更新之前上次到:/python目錄,然後用for去統計檔案。先備份到/tmp的目錄下:下面是部分內容效果(程式碼比較簡單,這裡不做說明開始部分的登入賬號是:xiaoluo.密碼是:123456):

wKioL1Q_kdHAzA_TAABmOM6Kbrg023.jpg

wKioL1Q_khOCMg7ZAACXBeIlU58349.jpg

程式碼展示:(複製即可使用)

#!/usr/bin/env python

import os

import fileinput

import mysqlconn

while True:

        name=raw_input("please input name:").strip()

        if name !="xiaoluo":

                        print "please try agine:"

                        continue

        password=raw_input("please input your password:").strip()

        if password !="123456":

                        print "please try agine:"

                        continue

        break

while True:

        print "1.webserver:[1]"

        print "2.mysqlserver:[2]"

        print "3.update code:[3]"

        choose=raw_input("your server is:")

        if choose=="1":

                user=os.getlogin()

                print user

                userlogin=os.system("w | grep 192|wc -l")

                userlogin=raw_input('check your free io:[y/n](60)')  

                if userlogin=="y":

                        io=os.system("iostat|awk 'NR==4{print $NF}'|cut -f 1 -d .|grep -v ^0$")

#               print io

                else:

                        pass

                cpu=raw_input("check your free cpu:[y/n]")

                if cpu=="y":

                        cpu_idle=os.system("top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d .")

                else:

                        pass

                swap=raw_input("check your free_swap:[y/n]")

                if swap=="y":

                        free_swap=os.system("/usr/bin/free -m|grep Mem|awk '{print $4}'")

                else:

                        pass

                web_load=raw_input("check your load:[y/n](18)")

                if web_load=="y":

                        web_load=os.system("uptime|awk '{print $NF}'|cut -f 1 -d .")

                else:

                        pass

                user_disk=raw_input("check your uses disk:[y/n]")

                if user_disk=="y":

                        user_load=os.system("df -H|sort -k5nr|grep -vE 'Filesystem|tmpfs|cdrom'|awk '{print $5 " " $1}'")

                else:

                        pass

                tcp_connection=raw_input("check your tcp connection:[y/n]" )

                if tcp_connection=="y":

                        tcp_connection=os.system("netstat -nat |grep 80|awk '{print $6}'|sort|uniq -c|sort -rn")

                else:

                        pass

                top_ip=raw_input("check yout top ip connection:[y/n]")

                if top_ip=="y":

                        top_ip=os.system("netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20")

                else:

                        pass

        if choose=="2":

                mysqluser=raw_input("please input mysql user:").strip()

                if len(mysqluser)==0:

                        print "empty mysqluser,try again"

                        continue

                else:

                        pass

                mysqlpassword=raw_input("please input mysql password:").strip()

                if len(mysqlpassword)==0:

                        print "empty mysqluser,try again"

                        continue

                else:

                        pass

                host=raw_input("please input mysql host:").strip()

                if len(host)==0:

                         print "empty mysqluser,try again"

                         continue

                else:

                         pass

                user=os.getlogin()

                print user

                userlogin=os.system("w | grep 192|wc -l")

                userlogin=raw_input(' check your io:[y/n]')

                if userlogin=="y":

                        io=os.system("iostat|awk 'NR==4{print $NF}'|cut -f 1 -d .|grep -v ^0$")

#               print io

                else:

                        pass

                cpu=raw_input("check your free cpu:[y/n]")

                if cpu=="y":

                        cpu_idle=os.system("top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d .")

                else:

                        pass

                swap=raw_input("check your free_swap:[y/n]")

                if swap=="y":

                        free_swap=os.system("/usr/bin/free -m|grep Mem|awk '{print $4}'")

                else:

                        pass

                web_load=raw_input("check your load:[y/n]")

                if web_load=="y":

                        web_load=os.system("uptime|awk '{print $NF}'|cut -f 1 -d .")

                else:

                        pass

                user_disk=raw_input("check your uses disk:[y/n]")

                if user_disk=="y":

                        user_load=os.system("df -H|sort -k5nr|grep -vE 'Filesystem|tmpfs|cdrom'|awk '{print $5 " " $1}'")

                else:

                        pass

                mysql_prolist=raw_input("check your mysql Curren connection:[y/n]")

                if mysql_prolist=="y":

                        f=open("/python/mysqlconn.txt")

                        u=f.readline()

                        print u

                mysql_MAX_prolist=raw_input("check your mysql max_connection:[y/n] ")

                if mysql_MAX_prolist=="y":

                        f1=open("/python/mysqlconn.txt")

                        u1=f.readlines()

                        for line in u1:

                                print line

        if choose=="3":

                name=raw_input("please input your well update package:(.tar)").strip()

                if len(name)==0:

                        print "empty mysqluser,try again"

                        continue

                else:

                        pass

#                       os.system("cd /python/%s" %(name))

                        w=os.listdir('/python/%s'%(name)) 

                        print w

#                       for line in w:

                        backup=os.system("mkdir /tmp/`date +%Y%m%d`")

                        for line in w:

                                os.system("cp -r /www/zhs/%s/%s /tmp/%s" %(name,line,backup))

                                os.system("cp -rf /python/%s/* /www/zhs/%s/" %(name,name))

第二、mysqlconn.py模組程式碼:

#!/usr/bin/env python

#xiaoluo

import os

os.system("sh /python/mysqlconn.sh")

第三、mysqlconn.sh指令碼用來收集資訊。在使用的時候根據自己伺服器的ip地址修改一下就好了:

#!/bin/bash

#xiaoluo

#18878774260

mysql -uroot -p123456 -h 192.168.38.131 -e "show processlist"|grep -v localhost|wc -l > /python/mysqlconn.txt

mysql -uroot -p123456 -h 192.168.38.131 -e "show variables like 'max_connections'"|grep max | awk '{print$2}' >>/python/mysqlconn.txt

©著作權歸作者所有:來自51CTO部落格作者小羅ge11的原創作品,如需轉載,請註明出處,否則將追究法律責任


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2820283/,如需轉載,請註明出處,否則將追究法律責任。

相關文章