在主机运维的过程中,我们可能需要监控或检测FTP是否可达,与ping类似,FTP直接跟IP地址或主机名,可检测FTP是否可以连接。我们可以加上用户名和密码,但此处,并不登录FTP服务器,只是进行尝试连接,并检测是否超时。
以下是检测常规端口21 FTP连接的脚本:
#!/bin/bash
#d定义数组,保存IP
IP_A=(10.254.96.38
10.254.96.40
#1.1.1.1 已下线
10.254.96.37)
#ssh远程登录主机执行命令
function FTP_TEST_IP()
{
for IP in $*
do
echo "${IP}"
T=$(timeout 2 ftp ${IP}) #默认端口 21
#echo "$T"
S=`echo "$T" | grep "Connected to ${IP} (${IP})." | wc -l` #根据主机返回的信息,如果超时,返回的匹配值行数为0
#双括号不用再次解析变量
if ((S==1)) #if 后加 then
then
echo "FTP ${IP} 连接成功"
elif ((S==0)) #elif 后加then
then
echo "FTP ${IP} 连接失败"
else
echo "FTP ${IP} 状态未知,返回结果;$T"
fi
done
}
#测试A主机采集点FTP连接是否正常
echo "---------------------------------------------------------测试A主机FTP连接---------------------------------------------------------------"
FTP_TEST_IP ${IP_A[*]}
FTP连接可以指定端口,对于特殊端口的FTP连接,我们单独提出来,增加一个一一对应的PORT数组就可以了,注意,IP与端口号严格对应下标
代码如下:
#!/bin/bash
#以下两个数组的成员下标一一对应,IP 与端口一一对应,不可错开,否则测试不能通过
SPECIAL_PORT_HOST=(10.254.98.249)
SPECIAL_PORT=(1160)
#ssh远程登录主机执行命令
function SPECIAL_PORT_FTP_TEST()
{
for (( i=0; i<${#SPECIAL_PORT_HOST[*]} ; i++ ))
do
echo "${SPECIAL_PORT_HOST[i]}"
T=$(timeout 2 ftp ${SPECIAL_PORT_HOST[i]} ${SPECIAL_PORT[i]})
#echo "$T"
S=`echo "$T" | grep "Connected to ${SPECIAL_PORT_HOST[i]} (${SPECIAL_PORT_HOST[i]})." | wc -l`
#双括号不用再次解析变量
if ((S==1)) #if 后加 then
then
echo "FTP ${SPECIAL_PORT_HOST[i]} 连接成功"
elif ((S==0)) #elif 后加then
then
echo "FTP ${SPECIAL_PORT_HOST[i]} 连接失败"
else
echo "FTP ${SPECIAL_PORT_HOST[i]} 状态未知,返回结果;$T"
fi
done
}
#特殊端口的FTP测试
echo "---------------------------------------------------------特殊端口的FTP---------------------------------------------------------------"
SPECIAL_PORT_FTP_TEST
测试结果:
---------------------------------------------------------测试135主机FTP连接---------------------------------------------------------------
10.254.96.38
FTP 10.254.96.38 连接成功
10.254.96.40
FTP 10.254.96.40 连接成功
10.254.96.37
FTP 10.254.96.37 连接成功