我有一个将文件上传到内部 FTP 服务器的 bash 脚本。如果 FTP 服务器因某种原因处于离线状态,则脚本将失败。如何在 bash 中包含条件来检查 FTP 服务器是否已启动,如果没有启动,则在 30 分钟后重试?
答案1
while true; do
if nc -z -w1 "$SERVER" 21; then
echo "FTP is up."
break
else
echo "FTP is down. Will try again."
sleep $((30*60))
fi
done
答案2
我建议使用nmap
,例如:
nmap REMOTE-IP -p FTP-PORT &> /dev/null
真实示例:
nmap 192.168.56.12 -p21 &> /dev/null
然后检查,$?
如果不是,0
则意味着服务没有运行。
对于重试,你可以使用类似以下的方法:
if [ "$?" -eq "0" ];
then
# do your job
else
echo "retry"
sleep 1800;
exec bash /path/to/script.sh
fi