一、环境配置

1.说明

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

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

1)安装python

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

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

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用户密码

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

#!/bin/bash
. $HOME/.profile
sqlplus -S "/ as sysdba" <<EOF
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" <<EOF
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.数据库状态

2.服务器状态

python结合shell脚本实现简单的日常集中巡检的更多相关文章

  1. python编写shell脚本详细讲解

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

  2. Python 调用 Shell脚本的方法

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

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

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

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

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

  5. 日常运维中的相关日志切割处理方法总结 [Logrotate、python、shell脚本实现 ]

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

  6. Shell脚本,简单& 强大

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

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

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

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

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

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

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

随机推荐

  1. 二级C考点汇总

    1.变量命名的合法性2.数据类型的转换,分为强类型和隐式类型3.字符串:字符串的声明.定义和使用,通常结合数组和指针 4.数组:下标的转换及数组的顺序存储5.函数:声明.定义.调用,递归函数(如菲薄纳 ...

  2. Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别

    Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.clas ...

  3. python中的列表list

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  4. 兼容主流浏览器的js原生函数封装

    1.获取和修改垂直滚动条的滚动距离 //获取滚动条滚动距离function getScrollTop(){ var fromTop=document.documentElement.scrollTop ...

  5. vue-router2.0简单路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  7. 【C语言】浅谈可变参数与printf函数

    一.何谓可变参数 int printf( const char* format, ...); 这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用& ...

  8. JSR330: DI

    JSR330 DI JSR 330 ,提供了一种可重用的.可维护.可测试的方式来获取Java对象.也称为Dependency Injection . DI应该都不陌生,因为它就是Spring core ...

  9. Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)

    (一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开 ...

  10. String, StringBuilder, StringBuffer问题

    1. 区别 String为字符串常量,而StringBuilder和StringBuffer都是字符串变量,其中StringBuilder线程非安全,StringBuffer线程安全. 每次对 Str ...