需求
现在公司有这样一个需求,需要收集每天全网运行业务的设备上的某个特定目录底下的日志到一台服务器(这台服务器我们简称logserver),这并在这台logserver上生成以日期为名字的目录
解决思路:
在logserver的crontab里设置两个脚本,在当日晚上23:30执行脚本1收集当日即将被删除的全网脚本;在并在早上8:30执行脚本2,收集昨日全网剩余的脚本。先测试对端设备是否能ping通,如果不行输出ping不通设备到特定日志,以备运维查看,再利用sshkey免密码登陆设备自动scp达到拷贝日志的目的。
以下是脚本正文及相应注释
脚本1
#!/bin/bash date=`date +%Y%m%d` mkdir /log/$date/sleep 10 cp -r /script/logcapture/directory/* /log/$date/ #/script/logcapture/directory/*下面都是目录,写了很多日志类型(rtsp,avsdb,protocoltiming等等,都是视频服务器上的日志类型,这里不作具体解释),日志类型底下再新建了设备名字的空目录 sleep 10 for d in `cat /script/logcapture/masterserver` #/script/logcapture/masterserver下面都是设备名字,事先做了无密码登陆(拷贝sshkey),直接ssh设备名字便能登陆设备,以下的masterserver,allservers与之类似,都是存放设备名称的 do if ping -c 2 $d判断是否ping命令是否能成功执行,如果ping两次不成功自动输出"remote server is unavailable" then scp root@$d:/arroyo/log/rtsp.log.$date* /log/$date/rtsp/$d/ else echo "remote server $d is unavailable" >> /script/logcapture/problemserver.log #输出不成功信息至特定日志 fi done
脚本2
#!/bin/bash date=`date -d yesterday +%Y%m%d` for a in `cat /script/logcapture/vault` #/script/logcapture/vault下面都是设备名字,事先做了无密码登陆,直接ssh设备名字便能登陆设备 do if ping -c 2 $a then scp root@$a:/arroyo/log/avsdb.log.$date* /log/$date/avsdb/$a/ scp root@$a:/arroyo/log/protocoltiming.log.$date* /log/$date/protocoltiming/$a/ scp root@$a:/arroyo/log/c2k.log.$date* /log/$date/c2k/$a/ else echo "remote server $a is unavailable" >> /script/logcapture/problemserver.log fi done sleep 5 for b in `cat /script/logcapture/masterserver` do if ping -c 2 $b then scp root@$b/arroyo/log/avsdb.log.$date* /log/$date/avsdb/$b/ scp root@$b:/arroyo/log/protocoltiming.log.$date* /log/$date/protocoltiming/$b/ scp root@$b:/arroyo/log/c2k.log.$date* /log/$date/c2k/$b/ else echo "remote server $b is unavailable" >> /script/logcapture/problemserver.log fi done sleep 5 for a in `cat /script/logcapture/allservers` do if ping -c 2 $b then scp root@$a:/arroyo/log/avsdb.log.$date* /log/$date/avsdb/$c/ scp root@$a:/arroyo/log/protocoltiming.log.$date* /log/$date/protocoltiming/$c/ scp root@$a:/arroyo/log/c2k.log.$date* /log/$date/c2k/$c/ else echo "remote server $c is unavailable" >> /script/logcapture/problemserver.log fi done
大概就是这样,有问题及改进建议请大家指出
原创文章,作者:wangtiejiang,如若转载,请注明出处:http://www.178linux.com/6564
评论列表(2条)
帮你修正了格式,应该比以前好些
@stanley:多谢!!