2

У меня есть 2 хоста, которые я могу подключить их через SSH. Через некоторое время на одном хосте появляется ошибка Write Failed: broken pipe. На другом хосте я не получаю эту ошибку.

Я не понимаю, почему на одном хосте я получаю эту проблему, а на другом хосте все в порядке.

Итак, я установил SSH-соединение с tmux, и внутри удаленного хоста я запускаю процесс переднего плана (celeryd). Но даже когда сеанс SSH завершается неудачно, и я снова подключаюсь к удаленному сеансу, процесс на переднем плане прекращается.

Мне бы хотелось, чтобы процесс переднего плана не прерывался при разрыве соединения SSH. Итак, у меня просто есть 2 решения:

  1. знать, как избежать разрыва труб SSH, или
  2. знать, как избежать того, что процесс умрет, когда соединение SSH обрывается.

Может ли кто-нибудь помочь мне в этом?

3 ответа3

2

Я сталкивался с этой проблемой только несколько раз. Для меня то, что вызвало бы сломанную трубу, было пропущенным маршрутом. Это происходило только при подключении с физической машины в основной сети к виртуальной машине в другой сети за Nat.

Я бы проверил наличие проблем с сетью, чтобы увидеть, можно ли остановить возникновение сломанных каналов.

Если вы не можете найти причину проблемы, вы можете использовать что-то вроде screen или tmux, чтобы держать терминал открытым, даже если вы отключены. Затем вы можете переподключиться и подключиться к экрану или сеансу tmux, и ваш процесс все еще будет запущен и активен.

2

Я не знаю, что происходит с вашим SSH-соединением, но, вероятно, плохое сетевое соединение? Вы можете попробовать использовать MOSH, который является более надежным, чем обычное соединение SSH. Особенно если в сети проблема.

Если вы не можете исправить соединение, вы можете попробовать использовать nohup перед вашей командой или просто nohup tmux и посмотреть, изменит ли это что-нибудь.

nohup - запустить команду, защищенную от зависаний, с выводом не-tty

СИНТАКСИС
nohup COMMAND [ARG] ...
Вариант nohup

1

Самая распространенная причина разрыва соединения с ssh для меня - отсутствие поддержки активности. Это настраивается в клиенте ssh. С ssh это будет "-oTCPKeepAlives = yes"

Что касается программ, запускаемых после закрытия ssh, когда вы запускаете программу в оболочке, это дочерний процесс экземпляра оболочки. Когда он закрывается, дети тоже закрываются. Вы можете попробовать запустить программу с символом & в конце, что приведет к другому процессу. Я только что сделал быструю проверку, и процесс, кажется, продолжается после отключения ssh-соединения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .