今天某台主机使用 sftp 进行文件传输的时候,由于网络原因,断断续续,时好时坏,已然影响到程序的正常运行。但是在跟领导解释时,却被说成是程序问题,让我们自行分析。 So ,为了能得出一个让大家都信服的结论,只能写个统计 sftp 连接时长的脚本,用来记录 sftp 连接是否正常。
结合 date 参数以及 expect ,经过验证,完成脚本如下:
#!/bin/bash
while true
do
#记录起始时间,并转换为秒
t1=`date +%s`
#利用expect执行sftp流程
expect -c "
spawn sftp finder@10.0.2.15
expect {
*yes/no* {send yes\r;exp_continue}
*Password* {send huangzhongzhang.cn\r}
*denied* {send_user [exec echo 连接被拒绝,请检查用户名密码!];exit}
}
expect >*
send exit\r
expect eof
"
#记录执行完成时间,并转换成秒
t2=`date +%s`
#求时间差
t3=$[$t2-$t1]
echo -e "\n消耗时间为:${t3}s\n"
sleep 5
done
执行结果如下:
[hzz@cos6 ~]$ ./sftp_time_count.sh
spawn sftp finder@10.0.2.15
Connecting to 10.0.2.15...
Password:
sftp> exit
消耗时间为:1s
spawn sftp finder@10.0.2.15
Connecting to 10.0.2.15...
Password:
sftp> exit
消耗时间为:1s
...
后台运行并把执行结果输出到 log 文件,就可以抓取 sftp 连接耗时的证明了。
当然,如果后续问题出现频繁,不排除把循环去掉,并修改脚本输出,以改造成 nagios 的自定义告警脚本,加入 nagios 豪华午餐…… 🙂