shell 统计脚本执行时间

今天某台主机使用 sftp 进行文件传输的时候,由于网络原因,断断续续,时好时坏,已然影响到程序的正常运行。但是在跟领导解释时,却被说成是程序问题,让我们自行分析。 So ,为了能得出一个让大家都信服的结论,只能写个统计 sftp 连接时长的脚本,用来记录 sftp 连接是否正常。

结合 date 参数以及 expect ,经过验证,完成脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/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

执行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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监控?》