
SSH를 통해 연결할 수 있는 호스트가 2개 있습니다. 한 호스트에서는 잠시 후 오류가 발생합니다. Write Failed: broken pipe.
다른 호스트에서는 이 오류가 발생하지 않습니다.
왜 한 호스트에서는 이런 문제가 발생하고 다른 호스트에서는 모든 것이 괜찮은지 이해할 수 없습니다.
그래서 tmux로 SSH 연결을 설정하고 원격 호스트 내에서 포그라운드 프로세스(celeryd)를 실행합니다. 그러나 SSH 세션이 실패하고 삭제된 세션에 다시 연결하더라도 포그라운드 프로세스가 종료되었습니다.
SSH 연결이 끊어졌을 때 포그라운드 프로세스가 종료되지 않았으면 좋겠습니다. 따라서 두 가지 해결책이 있습니다.
- SSH 깨진 파이프를 피하는 방법을 알고 있거나
- SSH 연결이 끊어지면 프로세스가 종료되는 것을 방지하는 방법을 알아보세요.
누구든지 이것에 대해 나를 도울 수 있습니까?
답변1
SSH 연결이 어떻게 되는지 모르겠지만 네트워크 링크가 잘못된 것 같습니다. 당신은 사용해 볼 수 있습니다모스, 이는 일반 SSH 연결보다 더 강력합니다. 특히 네트워크에 문제가 있는 경우에는 더욱 그렇습니다.
연결을 수정할 수 없는 경우 nohup
명령 앞에 를 사용해 보거나 nohup tmux
변경 사항이 있는지 확인할 수 있습니다.
nohup - tty가 아닌 출력으로 끊김에 영향을 받지 않는 명령을 실행합니다.
개요
nohup 명령 [ARG]...
nohup OPTION
답변2
나는 이 문제를 몇 번밖에 겪지 않았습니다. 나에게 있어 파이프가 파손된 원인은 경로가 누락되었기 때문입니다. 이는 기본 네트워크의 물리적 시스템에서 Nat 뒤의 다른 네트워크에 있는 VM으로 연결할 때만 발생했습니다.
깨진 파이프가 발생하는 것을 막을 수 있는지 확인하기 위해 네트워킹 문제를 확인하겠습니다.
문제의 원인을 찾을 수 없는 경우 screen 또는 tmux와 같은 것을 사용하여 연결이 끊어진 경우에도 터미널을 열어 둘 수 있습니다. 그런 다음 다시 연결하여 screen 또는 tmux 세션에 연결하면 프로세스가 계속 실행되고 활성화됩니다.
답변3
SSH 연결이 끊어지는 가장 일반적인 원인은 연결 유지가 없기 때문입니다. SSH 클라이언트에서 설정 가능합니다. SSH를 사용하면 "-oTCPKeepAlives=yes"가 됩니다.
SSH가 닫힌 후 실행되는 프로그램과 관련하여 셸에서 프로그램을 실행하면 이는 셸 인스턴스의 하위 프로세스입니다. 문이 닫히면 아이들도 문을 닫습니다. 끝에 &를 사용하여 프로그램을 실행해 보면 다른 프로세스가 생성됩니다. 방금 간단한 테스트를 했는데 SSH 연결이 끊어진 후에도 프로세스가 계속되는 것 같습니다.