실행 중이던 명령을 종료한 후에도 화면을 계속 실행하려면 어떻게 해야 합니까?

실행 중이던 명령을 종료한 후에도 화면을 계속 실행하려면 어떻게 해야 합니까?

내 임무는 분리된 세션을 시작한 다음 screen(예: 시스템 재부팅 시) 세션에 연결하고 실행 중인 프로세스를 중단/종료할 수 있는 것입니다.아니요화면이 종료됩니다. 안타깝게도 screen세션에 연결하고 실행 중인 명령을 중지하면 전체 screen세션이 종료됩니다.

[screen is terminating]

분리를 시작하려면 다음 명령을 사용합니다 screen.

screen -dm -S screen_name /bin/bash -c 'cd ~/mydir; npm start'

그런 다음 다음을 screen사용하여 세션에 연결합니다.

screen -r session_name

그렇게 하면 Ctrl-C명령 npmbash종료되고 화면이 종료됩니다.

npm내가 원하는 것은 내부에서 수동으로 세션을 시작한 것처럼 화면에 연결되었을 때 유사한 동작을 달성하는 것입니다 screen.

screen -S session_name

그런 다음 세션에서 screen:

cd ~/mydir
npm start

그런 다음 세션을 종료하지 않고 명령을 실행할 수 있습니다 Ctrl-C.npmscreen

답변1

이것이 내가 얻은 해결책입니다.

#!/bin/bash -il

# To install:
#   - put this file somewhere in your home directory like ~/start-screens
#   - chmod a+x ~/start-screens
#   - run "crontab -e" and add this line:
#     @reboot /bin/bash -li ~/start-screens

start() { screen -s "/bin/bash" -dmS "$1"; screen -S "$1" -X stuff "$2\n$3\n"; }

start service1 "cd dir1" "node index.js"
start service2 "cd dir2" "node index.js"

마법은 start() { ... }함수 내의 두 명령에 있습니다. 다음 줄은 화면을 시작하고 백그라운드에서 실행합니다.

screen -s "/bin/bash" -dmS "$1";

이 줄은 마치 화면에 직접 입력하는 것처럼 명령을 보냅니다.

screen -S "$1" -X stuff "$2\n$3\n";

또한 다음과 같은 몇 가지 추가 기능도 있습니다.

  • 두 개의 명령($2 및 $3)을 실행하므로 화면을 닫고 위쪽 화살표를 클릭하면 가장 최근 명령(서버 실행)으로 이동하므로 Enter 키를 누르고 다시 실행할 수 있습니다.
  • crontab에서 재부팅 시 추가하는 방법을 알려줍니다( @reboot /bin/bash -li ~/start-screens).
  • 쉘을 실행합니다대화형으로그리고 온 힘을 다해로그인환경, 사용 -li플래그. 내 테스트에서는 #!/bin/bash -licrontab과 crontab 모두에 이것이 필요한 것 같지만 @reboot /bin/bash -liYMMV입니다.
  • 이 스크립트에서는 여러 서비스를 실행할 수 있습니다. :)

관련 정보