早上好,
我参与了一个小项目,仅仅是为了学习python。 到目前为止,脚本将ssh到另一台服务器,以获取已关闭的节点列表。我想改变这一点,让它在tmp文件中存储一个down节点列表,第二天将这些节点与另一个节点进行比较,并且仅对昨天没有关闭的节点起作用。但那部分可以等待......
我目前看到的问题是在许多日志文件中搜索各种字符串,但是如果特定节点的行数超过某个数字;而不是被发送到终端..发送一条消息,而不是说#34;太多的日志条目;条目保存到/ tmp /..
这是我到目前为止所拥有的,但它并没有真正做到我想要的。
另外,如果您对我的剧本有任何其他建议,我会非常感激。我正在学习,但它正在慢慢下沉! :)
#!/usr/bin/python
#
from subprocess import *
import sys
from glob import glob
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-f', metavar='logname', help='logfile to check')
args = parser.parse_args()
ssh = Popen(["ssh", "root@srv1", 'check_nodes'],
shell=False,
stdout=PIPE,
stderr=PIPE)
result = ssh.stdout.readlines()
down_nodes=[]
status_list=["down", "admindown"]
if result == []:
error = ssh.stderr.readlines()
print >>sys.stderr, "ERROR: %s" % error
else:
for line in result[1:]:
columns = line.split()
status = columns[3]
nodes = columns[2]
if status in status_list:
down_nodes.append(nodes)
if args.f:
logs = args.f
else:
try:
logs = glob("/var/log/*")
except IndexError:
print "Something is wrong. Logs not available."
sys.exit(1)
valid_errors = ["error", "MCE", "CATERR"]
for log in logs:
with open("log", "r") as tmp_log:
opn_log = tmp_log.readlines()
for line in open_log:
for down_nodes in open_log:
if valid_errors in open_log:
print valid_errors
到目前为止我的测试工作有点......但它只是找到valid_errors
中的错误,并且找不到同时包含down_node
和valid_errors
的行在同一时间。此外,日期..也许类似于日志中包含down_node
,valid_errors
并包含少于3天的日期字符串的行。
从星期五开始 - 我没有使用Python做任何事情!我只使用shell脚本,并且总是发现bash脚本非常适合我需要的东西。所以我是初学者...... :)
由于 乔恩
答案 0 :(得分:0)
我已经分解了我的具体问题,如果它使它更清楚..基本上在目前,我只是想在一堆包含任何{{1}的日志文件中找到一行和任何down_nodes
我的代码:
valid_errors