프로세스 종료 후 화면이 종료되는 것을 방지하는 방법

프로세스 종료 후 화면이 종료되는 것을 방지하는 방법

다음과 같은 명명된 화면에서 프로세스를 시작합니다.

screen -dmS myscreen bash -c "export VAR=123; cd /usr/local/myproject; ./myscript.py"

그러나 몇 분 후에 스크립트가 충돌하고 종료되면 화면이 종료되므로 디버그 출력이 표시되지 않습니다. 내 스크립트는 화면에 수동으로 연결할 수 있을 만큼 충분히 오래 실행되지만 화면은 여전히 ​​자동으로 종료되어 나를 쫓아냅니다.

실행 중인 프로세스가 중지될 때 화면이 종료되는 것을 방지하는 방법은 무엇입니까?

답변1

출력을 less파일로 파이프한 tee다음 파일로 파이프 less하거나 sleep 99999명령 뒤에 "pause" 명령을 추가할 수 있습니다.

screen -dmS myscreen bash -c "export VAR=123; cd /usr/local/myproject; ./myscript.py; sleep 9999"

어쨌든 에서 로 전환하는 것이 screen좋습니다 tmux.이것명령을 실행하고 종료한 후 유지하는 방법을 이해하기 위한 질문입니다.

bash -i기본적으로 명령 끝에 추가할 수 있습니다 .

tmux start-server  
tmux new-session -d
tmux new-window 'ls;bash -i'

아니면 당신은 사용할 수 있습니다이것옵션remain-on-exit

종료 시 보존 설정 [on |leave]

이 옵션이 true인 경우 실행 중인 프로그램이 종료된 창은 닫히지 않고 열려 있지만 비활성 상태로 유지됩니다.

답변2

기본적으로 screen관찰한 대로 실행 중인 명령이 닫힐 때 종료됩니다. 단독으로 실행 하면 screen실행되는 명령은 대화형 셸이며 물론 하위 항목이 종료될 때 종료되지 않습니다.

다른 스크립트에서 비슷한 결과를 얻으려면 다음을 수행할 수 있습니다.

screen -dm -S myscreen
screen -S myscreen -X stuff "export VAR=123; cd /usr/local/myproject^M"
screen -S myscreen -X stuff "./myscript.py && exit^M"

먼저 로그인 쉘이 실행되고 로그인 쉘이 종료될 때까지 닫히지 않는 새 화면이 시작됩니다. 그런 다음 screen명령을 사용하여 stuff셸에 텍스트를 입력할 수 있습니다 . 첫 번째 줄에서는 변수를 정의하고 디렉터리를 변경합니다. 두 번째 줄에서는 스크립트를 시작한 다음 셸을 종료합니다(여기서 스크립트가 성공하면 screen 세션을 닫으려고 한다고 가정). 그러나 단락 및 ( &&) 로 인해 myscript.py실패할 경우 exit결코 발생하지 않으며 자유롭게 스크린 세션에 다시 연결하여 무슨 일이 일어났는지 확인할 수 있습니다.

올바르게 입력 하려면 (control-v)를 입력한 다음 Enter 키와 동일하게 입력 ^M해야 합니다 .^V^M

관련 정보