学习笔记 · 2015年6月23日

shell 统计脚本执行时间

浏览:48

今天某台主机使用 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 豪华午餐…… 🙂

《如何自定义nagios监控?》