Как ждать, пока ssh не станет доступен? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь написать скрипт, который будет ждать, пока сервер будет запущен, и проверить, работает ли ssh.

#!/bin/bash

until [ $(ssh -o BatchMode=yes -o ConnectTimeout=5 root@HOST echo ok 2>&1) = "ok" ]; do
    echo "Trying again..."
done

echo "SSH is running"

У меня появляется эта ошибка, если сервер выключен:

test3: ligne 3 : [: Too many arguments
Trying again...
^C

Если сервер работает, выведите: ok

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Тривиальное исправление заключается в размещении двойных кавычек вокруг строки, которая может оказаться пустой.

until [ "$(ssh ...)" = "ok" ]; do ...

Тест Bash-only [[ более терпим, поэтому вы можете использовать [[ ... ]] вместо [ ... ] и не нужно добавлять кавычки.

... но лучшим решением будет поиск состояния выхода из ssh:

until ssh ...; do ...

Если вы хотите, чтобы операция была тихой, добавьте перенаправление.

until ssh user@hostname true >/dev/null 2>&1; do ...

с любыми дополнительными параметрами, которые вы хотите, конечно.Вам может понадобиться добавить один или несколько параметров ssh -t, если он жалуется на отсутствие подключения к TTY, например.

0 голосов
/ 13 февраля 2019

Ваша команда ssh расширяется до нуля или нескольких слов;Вы должны процитировать его (и запустить Shellcheck в своем скрипте):

until [ "$(ssh ... )" = ok ]; do
...