Показывать вывод команды, запускаемой внутри экрана, если она выходит с ошибками

Я использую команду screen для запуска сервера на переднем плане. Но в случае возникновения ошибки при запуске сервера я не могу видеть вывод команды. Я должен запустить его снова без screen .

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

Я хотел бы видеть вывод STDERR / STDOUT на экране, даже если при использовании screen даже если экранированная команда не работает. Есть какой-либо способ сделать это?

  • Как убить все экраны?
  • Как эффективно использовать экран и SSH?
  • Автоматически сохранять историю команд bash в сеансе сеанса
  • Экран GNU - любой способ удалить пароль при отсоединении?
  • как конвертировать с startupScript из tmux в gnu-screen?
  • проблема с U-boot при запуске Linux в sd-карте
  • Открыть экранный процесс в терминале из сценария
  • Эмуляция терминала VT100 для использования с 8-разрядным компьютерным эмулятором на базе Java
  • 2 Solutions collect form web for “Показывать вывод команды, запускаемой внутри экрана, если она выходит с ошибками”

    О да. Когда вы начинаете и останавливаете screen он сбрасывает экран, очищая его в процессе. Самый простой способ убедиться, что вы видите ошибки, генерируемые вашей ruby командой, – это отделить ее от команды screen , чтобы она больше не зависела от другой:

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

    Вы, вероятно, уже знаете, что Ctrl A d отсоединит экран, а затем вы можете повторно подключить этот именованный сеанс с помощью screen -r server .

    Ошибки, которые могут быть сгенерированы командой ruby , останутся доступными для прочтения. Даже если команда завершает сеанс screen будет работать, поэтому важно помнить о том, чтобы снова и снова завершить работу, когда вы закончите.

    Как вы узнаете, что сервер успешно запущен и не собирается умирать с сообщением об ошибке?

    Если вы хотите показать сеанс экрана, пока его явно не убили, это легко. Запустите команду, которая не завершается после команды 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 ' 
    Linux и Unix - лучшая ОС в мире.