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

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

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

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

  • Как возобновить несколько экземпляров экрана из командной строки с минимальными шагами?
  • Почему я получаю ошибки «Идентификация столкновений между ...» и как их исправить?
  • Как перекомпилировать пакет, если он установлен через apt-get? (Ubuntu)
  • Прокрутка экрана или выключение паузы
  • Содержимое буфера Vi остается на экране после использования экранных команд
  • Доступ к экранам назад и вперед через скрипт bash
  • Как я могу заставить команду экрана GNU автоматически запускаться с каждой сессии ashy BusyBox?
  • Отображение имени сеанса экрана GNU и заголовка окна в командной строке
  • 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 - лучшая ОС в мире.