Дождитесь туннеля SSH, прежде чем продолжить скрипт

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

cf ssh -L 33001:db.host:3306 --skip-remote-execution App &
TUNNEL_PID=$!

mysqldump --protocol TCP --port= 33001 ..... db_name > /tmp/my-db-dump.sql

kill $TUNNEL_PID

Проблема в том, что mysqldump не работает с

mysqldump: ошибка: 2003: не удается подключиться к серверу MySQL на «localhost» (61) при попытке подключения

Я предполагаю, что проблема в том, что туннель еще не установлен. Когда я делаю sleep 5 перед mysqldump, все работает. Но я не хочу полагаться на случайные 5 секунд. Можно ли дождаться запуска туннеля?


person Uko    schedule 10.01.2018    source источник


Ответы (1)


Можете ли вы запустить mysqldump с помощью команды ssh вместо открытия туннеля?

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

ssh App "mysqldump db_name" > /tmp/my-db-dump.sql

Или вы можете даже сделать дамп в сжатый файл на сервере, а затем получить файл дампа с помощью scp. Это поможет переводу пройти быстрее.

ssh App "mysqldump db_name | gzip -c > /tmp/my-db-dump.sql.gz"
scp App:/tmp/my-db-dump.sql.gz .
ssh App "rm /tmp/my-db-dump.sql.gz"

Это не проверено, но я надеюсь, что это даст вам некоторые идеи для экспериментов.

person Bill Karwin    schedule 10.01.2018
comment
С cf ssh это немного отличается от стандартного SSH. Вместо ssh <host> "command" это cf ssh <app-name> -c "command". В качестве альтернативы вы можете использовать стандартные ssh/scp/sftp, но команды немного запутаны -› github.com/cloudfoundry/ - person Daniel Mikusa; 11.01.2018
comment
Спасибо за совет @DanielMikusa, я оставлю свои примеры в виде псевдокода. :-) - person Bill Karwin; 11.01.2018