2017-02-08 3 views
0

Я пытаюсь написать Баш скрипт, который будет проверять, если Redis работает и запустить его, если это не так:Как остановить Bash скрипт от выхода на ошибки

ping=$(redis-cli ping) 

if [ "$ping" = PONG ] 
then 
    ECHO "redis response: $ping" 
else 
    response = $(redis-server /usr/local/etc/redis.conf) 
    ECHO "$response" 
fi 

Если Redis работает я получаю ожидаемый redis response:PONG Однако, если Redis не работает, я получаю Could not connect to Redis at 127.0.0.1:6379: Connection refused, а Redis не запускается.

Я думаю, что происходит, что сообщение «не может подключиться» рассматривается как неперехваченное исключение и, следовательно, завершает работу сценария.

Есть ли способ поймать это и закончить запуск сценария? Это даже проблема?

ответ

1

Следующее обновление скрипта делает именно то, что я хочу, чтобы:

ping=$(redis-cli ping) 
if [ "$ping" = PONG ] 
then 
    ECHO "Redis response: $ping" 
else 
    ECHO starting Redis 
    redis-server /usr/local/etc/redis.conf 
fi 
ECHO "$(redis-cli ping)" 

Как Янош правильно указал в своем втором комментарии, заявление еще выполнял.

Что меня отбросило, так это то, что ECHO $response не печатал в оригинальном сценарии. Я предполагаю, что предыдущая строка, которая запускает Redis, является асинхронной. Поэтому ECHO $response был вызван до того, как Редис бежал.

Я был также сбит тем фактом, что ответ пинга был напечатан, когда Редис не работал. Логика сценария диктует, что ответ должен печататься только в том случае, если $ping = PONG, и он должен добавить «Redis Response:». Я все еще не уверен, почему он печатает сообщение «не удалось подключиться», но whatevs ...

Еще раз спасибо Janos

Смежные вопросы