명령이 오류와 함께 종료된 경우 화면 내에서 실행된 명령의 출력을 표시합니다.

명령이 오류와 함께 종료된 경우 화면 내에서 실행된 명령의 출력을 표시합니다.

저는 screen이 명령을 사용하여 포그라운드에서 실행 중인 서버를 시작하고 있습니다. 그런데 서버를 시작할 때 오류가 발생하면 명령의 출력을 볼 수 없습니다. 나는 없어야 한다 screen.

foo@ubuntu:~/server/application$ screen -S server ruby start.rb true 3001
[screen is terminating]
foo@ubuntu:~/server/application$

screen필터링된 명령이 실패 하더라도 화면에서 STDERR/STDOUT 출력을 보고 싶습니다 . 이를 수행할 수 있는 방법이 있습니까?

답변1

서버가 성공적으로 시작되었고 오류 메시지와 함께 종료되지 않았다는 것을 어떻게 알 수 있습니까?

명시적으로 종료될 때까지 스크린 세션을 표시하려는 경우 쉽습니다. ruby쉘 실행과 같이 명령을 실행한 후에도 종료되지 않는 명령 :

screen -S server sh -c 'ruby start.rb true 3001; echo "Server terminated with status $?"; exec bash'

또는 시간 초과 후 종료

screen -S server sh -c 'ruby start.rb true 3001; echo "Server terminated with status $?"; sleep 3600'

서버가 계속 실행 중이더라도 시간 초과 후 분리하려는 경우:

screen -S server sh -c '
  ruby start.rb true 3001 &
  server_pid=$!
  sleep 2
  if [ -z "$(ps -o pid= -p "$server_pid")" ]; then
    wait
    echo "Server terminated with status $?"
    exec bash
  fi
'

답변2

예. 시작하고 중지할 때 화면 표시를 재설정하고 screen그 과정에서 화면을 지웁니다. 명령에 의해 생성된 오류를 확인할 수 있는 ruby가장 쉬운 방법은 screen한 명령이 더 이상 다른 명령에 종속되지 않도록 해당 오류를 명령과 분리하는 것입니다.

screen -S server
ruby start.rb true 3001
...
exit

Ctrl Ad이렇게 하면 화면이 분리되고 나중에 를 사용하여 이 명명된 세션을 다시 연결할 수 있다는 것을 이미 알고 있을 수 있습니다 screen -r server.

이 명령으로 생성될 수 있는 오류는 ruby계속해서 살펴볼 수 있습니다. 명령이 종료되더라도 세션은 계속 실행되므로 완료되면 screen항상 exit다시 연결하는 것을 잊지 마십시오.

관련 정보