python结合shell脚本实现简单的日常集中巡检
一、环境配置
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脚本实现简单的日常集中巡检的更多相关文章
- python编写shell脚本详细讲解
python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...
- Python 调用 Shell脚本的方法
Python 调用 Shell脚本的方法 1.os模块的popen方法 通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出. > ...
- 【转】shell脚本实现多台服务器自动巡检--可参考学习
shell脚本实现多台服务器自动巡检 摘要: 运维服务一个项目二十多台(或者多台)服务器,每天要做服务器的性能巡检工作是查看服务器的CPU.内存.磁盘空间是否在正常值范围内.像 ...
- shell脚本实现多台服务器自动巡检
shell脚本实现多台服务器自动巡检 摘要: 运维服务一个项目二十多台(或者多台)服务器,每天要做服务器的性能巡检工作是查看服务器的CPU.内存.磁盘空间是否在正常值范围内.像这样每天 ...
- 日常运维中的相关日志切割处理方法总结 [Logrotate、python、shell脚本实现 ]
对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...
- Shell脚本,简单& 强大
摘自<码农增刊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 ...
随机推荐
- 零件库管理信息系统设计--part03:管理员登录部分设计
兄弟们,我又回来啦! 上次我把表建完了.今天来点干货,我们用ssm框架来先简单实现一下管理员的登录功能. 在实现之前,我对user表(管理员表)做了些简单的修改,先来看看: 忽略哪些蓝色的马赛克和乱输 ...
- iOS开发之自定义UITableView的cell
系统默认的UITableViewCell的每行都有横线(分隔符),就算没有数据也是如此,有时候我们想只在有数据的地方有下划线,可以去除下划线,然后在awarkFromNid方法中使用addsubvie ...
- python中input()与raw_input()的区别到底是啥?-----marsggbo原创作品为你解答
首先先给出总结:input () = int(raw_input()) 有图有真相!!! 先看看input的例子: 可见用input键入得到int类型的数据,那如果输入一些非int类型的会怎么样呢? ...
- PMP和PRINCE2的价值各是什么?PRINCE2的含金量如何?PMP和prince2有什么区别?
很多学员朋友会问我同样的问题:"PMP和PRINCE2到底有什么区别?哪个含金量更高?"看来,这是所有要参加认证的朋友普遍关心的问题,我将根据自己的切身体会,从三个方面回答这个问题 ...
- PRINCE2认证
PRINCE是PRoject IN Controlled Environment(受控环境下的项目管理)的简称. PRINCE2描述了如何以一种逻辑性的.有组织的方法,按照明确的步骤对项目进行管理.它 ...
- iOS 历史浏览网页的定向跳转
在实际的开发过程中,涉及到交互的问题,原生和H5的网页相互嵌套,直接造成跳转的混乱,混乱就应该指定的历史记录中,就需要网页的一些相关的一些属性问题 需要在webview里面的代理方法中执行相对应的操作 ...
- 第4章Zabbix监控实践
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- 如何在IntelJ下用Maven创建一个Web项目
相信一开始做Web项目的同学都是直接把项目包放在WEB-INF/lib目录下,然后就开始做项目了.但是之后接触了一些使用了Maven进行包管理的项目,我们就不得不学一学如何用Maven做包管理. 在网 ...
- Wpf学习之路……
Wpf学习之路-- Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1. 原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml ...
- JAVA 发送邮件代码---发送HTML内容
依赖包:mail.jar JAR链接地址: http://pan.baidu.com/s/1o8LNl0Y 密码: ja52 package com.dava; import java.util.Pr ...