python编写linux巡检脚本_python结合shell脚本实现简单的日常集中巡检

本文介绍了使用Python进行服务器自动化巡检的详细步骤,包括环境配置、所需文件内容以及Python脚本的实现。通过Python的paramiko库实现SSH连接,执行远程命令,对数据库状态、服务器性能等进行检查。此外,还展示了如何通过shell脚本执行数据库巡检任务和服务器状态监控。
摘要由CSDN通过智能技术生成

一、环境配置

1.说明

下面的安装过程适合开发、调试Python脚本,如果是直接使用的话没有这么复杂。为了防止由于版本问题导致安装问题,请到http://pan.baidu.com/s/1nt1NKSh 下载所需软件(本人上传,链接不会失效)。

2.安装过程(如果不是下载的安装包,除了python之外,其他都可以采用pip安装,更方便)

1)安装python

因为Python 本身不大,并且属于解释型语言,所以建议采用默认安装,即安装到C盘。 需要注意的是到下图步骤后点开标识的下拉箭头选择第一个,否则还需要手动配置环境变量。

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xMTE5NzQ3LzIwMTcwNC8xMTE5NzQ3LTIwMTcwNDE4MTc0MDMyNzQzLTYzNTc2ODI1MC5wbmc=.jpg

2)安装pycrypto,过程如图所示

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xMTE5NzQ3LzIwMTcwNC8xMTE5NzQ3LTIwMTcwNDE4MTc0MzAwNDE1LTIzMDQ1NjE3OS5wbmc=.jpg

3)安装ecdsa,步骤同上

4)安装paramiko,步骤同上

5)修改文件

Python安装目录下:/Crypto/Random/OSRNG/nt.py 文件中找到

import winrandom

改成

from Crypto.Random.OSRNG import winrandom

二、所需文件及其内容

1.IP地址及口令文件

创建一个名字为ip.txt的文本文件(只要跟python脚本中文件名字一致即可),内容格式:

IP,username,password

参数说明:

IP:远程服务器的IP地址

username:oracle用户,即能登录sqlplus的用户

password:oracle用户密码

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xMTE5NzQ3LzIwMTcwNC8xMTE5NzQ3LTIwMTcwNDE4MTc0NzEzMjU5LTY2NzI0NjYwLnBuZw==.jpg

2.数据库巡检文件,代码如下

#!/bin/bash

. $HOME/.profile

sqlplus -S "/ as sysdba" <

host echo "**************** check Instance status************"

select status,database_status from v\$instance;

host echo "****************check database status************"

select log_mode,open_mode from v\$database;

EOF

echo "*********************check alter log file ***********"

dump=$(sqlplus -s "/ as sysdba" <

set head off

select value from v\$parameter where name='background_dump_dest';

exit

EOF)

startline=$(cat $dump/alert*.log |grep -n "$(date +'%a %b %e')"|head -1| awk -F: '{print $1}')

echo "Contains the ORA- line in the file:"

if [ "$startline" = "" ]

then

echo "There is no information today."

else

awk -v line=$startline 'BEGIN{ORS="\n"}NR>line{print $0}' $dump/alert*.log |grep ORA- |wc -l

fi

echo

echo "****************check listening status****************"

##startline=$(lsnrctl status|grep -n "Listening Endpoints Summary"| head -1 |awk -F: '{print $1}')

##lsnrctl status |awk -v line=$startline 'BEGIN{ORS="\n"}NR>=line{print $0}'

line=$(lsnrctl status |grep -n "The command completed successfully"| head -1 |awk -F: '{print $1}')

##echo $line

if [ "$line" = "" ]

then

echo "can not get Listening info."

else

echo "Listening normal"

fi

echo

echo "****************check disk space (above 90%)****************"

df |sed -e 's/%//'|awk '$5>90{print $0}'

3.数据库服务器状态文件

echo "********** memory ***********************"

free

echo " "

echo "********** disk space *******************"

df -Th

echo " "

echo "********** vm state ********************"

vmstat 2 3

echo " "

echo "********** load state ********************"

w

echo " "

4.python脚本文件

import paramiko

import datetime

import os

##读取的脚本功能 1:巡检内容 2:负载状态

func=1

##读取当前路径

base_dir=os.getcwd()

##命令开始执行时间

starttime=datetime.datetime.now()

print(" -------------------------------------------------------------")

print("| |")

print(" startime: ",starttime)

print("| |")

print(" -------------------------------------------------------------")

##注意路径前面的r,否则有些文件会当作转义字符处理

##读取命令脚本

if func==1:

cmd_filepath=base_dir+r"\xunjian.txt"

else :

cmd_filepath=base_dir+r"\fuzai.txt"

cmd_file=open(cmd_filepath,"r")

cmd=cmd_file.read()

##读取IP地址列表

ip_filepath=base_dir+r"\ip.txt"

ip_file=open(ip_filepath,"r")

while 1:

ipinfo=ip_file.readline()

if not ipinfo :

break

else :

##读取IP,用户名,密码

infos=ipinfo.split(',')

host=infos[0]

username=infos[1]

pwd=infos[2].strip()

pwd=pwd.strip('\n')

##远程连接服务器

client = paramiko.SSHClient()

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

client.connect(host, 22, username, pwd)

stdin, stdout, stderr = client.exec_command(cmd)

print(" -------------------------------------------------------------")

print("| |")

print(" ",host)

print("| |")

print(" -------------------------------------------------------------")

for line in stdout:

print(line.strip('\n'))

client.close()

print("")

print('check complete................................')

##命令执行完成时间

endtime=datetime.datetime.now()

print(" -------------------------------------------------------------")

print("| |")

print(" endtime: ",endtime)

print("| |")

print(" -------------------------------------------------------------")

print(" -------------------------------------------------------------")

print("| |")

print(" startime: ",starttime)

print(" endtime: ",endtime)

print(" cost: ",endtime-starttime)

print("| |")

print(" -------------------------------------------------------------")

三、效果展示

1.数据库状态

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xMTE5NzQ3LzIwMTcwNC8xMTE5NzQ3LTIwMTcwNDE4MTc1NDMyNDc3LTEwNDc2NzU2ODUucG5n.jpg

2.服务器状态

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xMTE5NzQ3LzIwMTcwNC8xMTE5NzQ3LTIwMTcwNDE4MTc1NDU4NTQwLTEwOTIyMTA5NTMucG5n.jpg

python编写shell脚本详细讲解

python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...

Python 调用 Shell脚本的方法

Python 调用 Shell脚本的方法 1.os模块的popen方法 通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出. &gt ...

【转】shell脚本实现多台服务器自动巡检--可参考学习

shell脚本实现多台服务器自动巡检   摘要:           运维服务一个项目二十多台(或者多台)服务器,每天要做服务器的性能巡检工作是查看服务器的CPU.内存.磁盘空间是否在正常值范围内.像 ...

shell脚本实现多台服务器自动巡检

shell脚本实现多台服务器自动巡检 摘要:         运维服务一个项目二十多台(或者多台)服务器,每天要做服务器的性能巡检工作是查看服务器的CPU.内存.磁盘空间是否在正常值范围内.像这样每天 ...

日常运维中的相关日志切割处理方法总结 &lbrack;Logrotate、python、shell脚本实现 &rsqb;

对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

Shell脚本,简单&amp&semi; 强大

摘自<码农增刊Linus与Linux>,章节:你可能不知道的Shell.   最近阅读完这本书,觉得其中有很多不错的内容,这是其中的一个Shell小甜点,拿来和大家一起分享一下,增加了 ...

Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)

Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...

利用python执行shell脚本 并动态传参 及subprocess基本使用

最近工作需求中 有遇到这个情况  在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法   最后还是选择了subprocess这个python标准库 su ...

jenkins自动部署应用到tomcat中,编译后shell脚本的简单示例

jenkins的安装这里就不做描述了,很简单的  百度搜索一下即可 这里安装的jenkins-2.39-1.1 wget http://pkg.jenkins-ci.org/redhat/jenkin ...

随机推荐

nodejs redis 发布订阅机制封装

最近项目使用redis,对publish 和 subscribe的使用进行了了解,并进行了封装. var config = require('../config/config'); var log = ...

Linux命令&colon;修改文件权限命令chmod、chgrp、chown的区别

chmod是更改文件的权限 chown是改改文件的属主与属组 chgrp只是更改文件的属组. (1)chmod是修改文件/目录的权限.可以有文字修改和数字修改. #chmod 777 /home/be ...

Springside学习

http://blog.chinaunix.net/uid-122937-id-3935052.html [一]Maven + Eclipse + springside4安装与配置 Maven安装与配 ...

Effective&lowbar;java之二:慎用重载函数

每周写一篇技术博客的愿望一直没实现, 从这周開始每周五晚10点是写博客的时间 OOP的一个重要特性就是多态,实现多态的目的有多种途径.比方:重载overload.重写overwite.面向接口编程等等 ...

Dojo Widget中的全局变量

转自http://blog.163.com/mqsy_yj/blog/static/2940499220121014115338929/ 前期设计了一个清除widget的功能,虽然可以从html文件中 ...

Oracle中trunc函数、round 函数、ceil函数和floor函数的使用

Oracle中trunc函数.round 函数.ceil函数和floor函数的使用 1.1trunc函数处理数字 trunc函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定 ...

&lbrack;转&rsqb; EF Configuring a DbContext

本文转自:https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext Note This document ...

linux 内核的rt&lowbar;mutex 锁操作实现的临界区

rt_mutex 定义的锁规则: 以偶对齐的task_struct指针为上锁标记, 偶对齐的指针地址最低位用以标记是否有waiters. rt_mutex的trylock,lock,以及unlock都 ...

Linux pmstat命令

mpstat是linux一款实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPU系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU ...

JavaScript--元素对象方法setAttribute&lpar;&rpar; 和appendChild&lpar;&rpar;

appendChild() 方法可向节点的子节点列表的末尾添加新的子节点 setAttribute() 方法创建或改变某个新属性.如果指定属性已经存在,则只设置该值 ..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值