Сломанная труба SSH убивает процесс переднего плана

2

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

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

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

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

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

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

xeon123
источник

Ответы:

2

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

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

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

ОПИСАНИЕ
nohup КОМАНДА [ARG] ...
ВАРИАНТ nohup

Slizzered
источник
2

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

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

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

grag42
источник
1

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

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

rfportilla
источник