У меня есть сценарий удара, который загружает файлы на внутренний FTP-сервер. Если FTP-сервер будет в режиме офлайн по любой причине, то сценарий перестанет работать. Как я включаю условное выражение в удар, чтобы проверить, произошел ли FTP-сервер и в противном случае повторить за 30 минут?
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
Я предлагаю использовать 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