ssh соединение "клиент _петля :отключение отправки :Broken pipe" или "Сброс соединения через порт 22"

ssh root@remotemachine.com '/opt/app/startup.sh'
...
#!/bin/bash
java -jar./app.jar --spring.profiles.active=dev > startup.log & 
echo $! >./app.pid

Когда вы запускаете startup.shтаким образом, рабочий каталог для процесса (в удаленной системе )будет домашним каталогом пользователя root. этот каталог, вероятно, "/" или "/ root" или что-то в этом роде. Ваш сценарий не содержит команд cd, поэтому он попытается получить доступ к app.jar, startup.logи app.pidв домашнем каталоге root. Вероятно, в домашнем каталоге root нет файла с именем app.jar, поэтому команда java ничего не делает.

Если вы хотите получить доступ ко всем этим файлам в /opt/app, вам следует перейти в этот каталог на удаленной системе:

ssh root@remotemachine.com 'cd /opt/app && /opt/app/startup.sh'

В качестве альтернативы вы можете перейти в правильный каталог внутри скрипта:

#!/bin/bash
cd /opt/app || exit 1
java -jar./app.jar --spring.profiles.active=dev > startup.log & 
echo $! >./app.pid
4
02.08.2020, 22:55
1 ответ

Я решил ту же проблему, отредактировав файл ~/.ssh/config, чтобы он содержал:

Host *
    ServerAliveInterval 20
    TCPKeepAlive no

Мотивация:

TCPKeepAlive noозначает «не отправлять на сервер сообщения проверки активности». Когда установлено противоположное значение TCPKeepAlive yes, клиент отправляет сообщения проверки активности на сервер и требует ответа, чтобы поддерживать завершение соединения . Это обнаружит, если сервер выйдет из строя, перезагрузится и т. д. Проблема в том, что если соединение между клиентом и сервером прерывается на короткий период времени (из-за нестабильного сетевого соединения ), это привести к сбою сообщений поддержки активности, и клиент завершит соединение с «сломанной трубой».

Параметр TCPKeepAlive noговорит клиенту просто предположить, что соединение по-прежнему работает, пока не будет доказано обратное по запросу пользователя, что означает, что временные разрывы соединения, пока ваш термин ssh бездействует в фоновом режиме, не разорвут соединение.

20
18.03.2021, 23:15

Теги

Похожие вопросы