需求
現在公司有這樣一個需求,需要收集每天全網運行業務的設備上的某個特定目錄底下的日志到一臺服務器(這臺服務器我們簡稱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.www58058.com/6564
幫你修正了格式,應該比以前好些
@stanley:多謝?。?/p>