태그 보관물: gnu-screen

gnu-screen

스크립트 실행 후 GNU 화면이 세션을 종료하지 못하도록 방지 작동하게하는 것입니다 (듣기 중단하지

GNU 화면이 “가상”터미널을 연결하지 않고 강제로 연결하려고 시도하고 내부 스크립트를 실행하고 스크립트가 종료되면 세션을 종료하지 마십시오.

나는 다음을 포함하여 많은 조합을 시도했다.

screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh

또는

screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh

그들 중 누구도 일하지 않았습니다. 스크립트를 실행하지 않고 세션을 가져오고 스크립트를 실행하지만 세션이 완료되면 세션이 종료되거나 “No screen session found”오류가 발생합니다.

내가 기본적으로하려고하는 것은 PHP로 작성된 UDP 리스너를 실행하고 무한 루프에서 작동하게하는 것입니다 (듣기 중단하지 마십시오). 예- &마지막에 PHP 스크립트 를 실행하여 PHP CLI를 데몬으로 실행할 수 있습니다. 문제는 서버라는 정크 (QNAP-절대로이 쓰레기를 사지 마십시오!)를 사용하고 있다는 것입니다. 이것을 무시하는 것 같습니다. SSH 세션을 로그 오프하면 스크립트가 중지됩니다.

따라서 screen유일한 옵션 인 것 같습니다. 그러나 명령을 실행하거나 스크립트가 끝나면 세션이 종료되는 이유를 이해할 수 없습니다.

편집 : 인터넷에서 찾은 예제도 시도했습니다.

screen -dmS name
screen -S name -p windowname -X stuff 'mc
'

부족하지 않습니다! 첨부 한 후 ( screen -R name) Midnight Commander HASN이 실행되지 않은 것으로 보입니다. 모범 저자가 말했지만 그렇게 될 것입니다.



답변

스크립트가 완료된 후 화면을 바쁘게 유지하려면 창에서 무언가를 지속적으로 실행하십시오. “무언가”에 대한 가장 간단한 선택은 아마도 대화식 쉘일 것입니다. bash대화식 쉘의 선택으로 가정하는 방법은 다음과 같습니다 .

screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
  • -dm: 분리 모드에서 화면을 시작합니다
  • -S: 나중에 더 쉽게 검색 할 수 있도록 화면의 세션 이름을 설정합니다.
  • sh -c '...': 단순히 스크립트를 실행하는 대신 종료 sh -c되는 여러 명령을 실행하는 데 사용
  • exec bash: 스크립트가 종료되면 sh위에서부터는 대화식 쉘 ( bash)로 전환되며 외부에서 종료 될 때까지 종료되지 않아야합니다. 인스턴스가 활성 상태 인 한 계속 screen열려 bash있습니다.

답변

나는 sh -c데비안 7.8을 실행하는 라즈베리 파이 2에서 운이 없었습니다 . 그러나 bash -c일을했다 :

명령:

/usr/bin/screen -dmS test-screen bash -c "/usr/bin/top; exec bash"

답변