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


2

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

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

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

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

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

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

Ответы:


2

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

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

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

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


2

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

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

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


1

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.