自动巡检脚本(仅作记录用)

巡检八台服务器,最后生成结果到第一台服务器(称A服务器)

1 设置scp免密

在除A外的服务器上执行命令:ssh-keygen -t rsa,遇到提示回车便可。 在 ~/.ssh/ 目录下,可以看到生成了id_rsa.pub文件 然后将除A外的其他服务器秘钥复制到A服务器~/.ssh/authorized_keys文件中保存便可。 这样A服务器到B服务器就实现了免密登录及传输。

2 部署巡检脚本

在这8台服务器分别部署巡检脚本,代码如下

#!/bin/bash
hostname=$HOSTNAME
date=`date +%c`
filename=10.1.150.37_`date +%Y%m%d`.txt
tempfile="/home/$filename"
if [ ! -f "$tempfile" ];then
touch "$tempfile"
fi
echo "-----------磁盘使用情况(10.1.150.37)-----------------------------" >>$tempfile
df -h >>$tempfile

scp -P 21006 $tempfile root@10.1.241.2:/home/checklogs/
rm -rf $tempfile

设置文件名为服务器IP(也可以为主机名hostname)+日期。 在文件内写入df -h的内容,然后通过scp传输到目标服务器A。 传输完成之后并删除该文件。

3 设置定时任务

输入命令 crontab -e 进入编辑页面(通vim操作): 输入定时任务(每天早上10:30执行 /home/check.sh脚本): 30 10 * * * sh /home/check.sh

4 整合8台服务器的巡检结果

在A服务器上部署该脚本,按要求的顺序写入文件(如果没有顺序要求,则不用这么麻烦),并删除8台服务器前一天的巡检结果。

#!/bin/bash
TIME=$(date "+%Y-%m-%d")
filename=A_$TIME.txt
tempfile="/home/checklogs/$filename"

cat /home/checklogs/10.1.150.34_`date +%Y%m%d`.txt >> $tempfile
cat /home/checklogs/10.1.150.35_`date +%Y%m%d`.txt >> $tempfile
cat /home/checklogs/10.1.150.36_`date +%Y%m%d`.txt >> $tempfile
cat /home/checklogs/10.1.150.37_`date +%Y%m%d`.txt >> $tempfile
cat /home/checklogs/192.168.205.2_`date +%Y%m%d`.txt >>  $tempfile
cat /home/checklogs/192.168.205.3_`date +%Y%m%d`.txt >>  $tempfile
cat /home/checklogs/192.168.205.4_`date +%Y%m%d`.txt >>  $tempfile
cat /home/checklogs/192.168.205.5_`date +%Y%m%d`.txt >>  $tempfile


 rm -rf /home/checklogs/*`date -d -1 day +%Y%m%d`.txt

如下图A开头的文件为get.sh整合好的巡检结果。 其余8个文件为各个服务器传输过来的巡检结果,get.sh会删除前一天的这些文件。 并将A服务器上的get.sh也设置为定时任务 这样每天早上10:40便可查看巡检结果了……

经验分享 程序员 微信小程序 职场和发展