
저는 좀 더 탄력적으로 만들고 싶은 아주 오래된 콘솔 애플리케이션을 가지고 있습니다. 프로그램을 사용하는 방법은 다음과 같습니다.
- 사용자가 사용자 정의 터미널 에뮬레이터를 사용하여 SSH를 통해 원격 시스템에 연결합니다.
- 사용자가 쉘 스크립트를 시작합니다.
- 쉘 스크립트는 장기 실행 진행 데이터베이스 프로세스를 시작할 수 있습니다.
분명히 사용자가 시스템에 대한 SSH 연결을 잃는 경우가 있는데, 이 경우 SSH 세션이 종료되고 내부에서 실행 중인 쉘 스크립트가 종료되며 마지막으로 진행 데이터베이스 프로세스가 종료됩니다. 천 명 중 한 명은 이로 인해 데이터베이스가 손상될 수 있으므로 이러한 일이 발생하지 않도록 방지하고 싶습니다.
내가 지금까지 시도한 것 :
- 쉘 스크립트를 시작하기 전에 screen 또는 tmux 세션을 시작하십시오. 이는 애플리케이션이 TERM 변수를 at386으로 설정해야 하기 때문에 작동하지 않습니다(그리고 termcap/terminfo를 완전히 우회합니다...어...)
- nohup/disown 진행 프로세스 - 쉘 스크립트와 진행 프로세스가 모호한 방식으로 지속적으로 서로 통신하는 것처럼 보이기 때문에 작동하지 않습니다.
SSH 세션이 종료될 때 진행 프로세스가 종료되지 않도록 하는 방법에 대한 다른 아이디어가 있습니까?
답변1
term at386
TERM을 재정의하려면 .screenrc에 추가하세요 . 도움이 되지 않으면 시도해 보세요.분리Screen(자체적으로 터미널 에뮬레이션을 수행하지 않음) 대신.
답변2
대부분의 경우 가장 간단한 해결책은 nohup
비대화형 프로세스를 사용하여 이를 백그라운드로 두고 &
표준 출력 및 표준 오류를 파일로 리디렉션하는 것입니다.
답변3
즉, 화면과 같은 것을 찾고 있지만 자체 번역을 수행하는 대신 제어 시퀀스를 터미널에 전달하는 것은 무엇입니까? 노력하다분리. Screen과 동일한 터미널 분리 기능을 제공하지만 다중 창이나 터미널 에뮬레이션은 없습니다.
답변4
아마도 vnc나 nx를 통해 원격 X 데스크톱을 사용해 볼 수도 있습니다. 보안을 위해 ssh를 통해 vnc 터널을 설정하거나 기본적으로 ssh를 통해 실행되는(더 빠른) nx를 사용할 수 있습니다. 그런 다음 응용 프로그램은 X 데스크탑의 터미널에서 실행될 수 있으며, 연결이 끊어져도 데스크탑은 계속 실행되어 언제든지 다시 연결할 수 있습니다. 제가 가장 좋아하는 것은 최대 2명의 동시 사용자가 무료로 사용할 수 있고 설치가 매우 쉬운 No Machine NX입니다.
가능한 경우 또 다른 방법은 ALOM, ILOM, DRAC, IP-kvm 또는 IP 직렬 콘솔 등을 통해 원격 콘솔을 사용하는 것입니다. 이렇게 하면 애플리케이션이 콘솔에서 실행되고 연결 실패로 인해 중단되지 않습니다.