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

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

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

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

  • Почему изменение $ PATH влияет на дочерние оболочки, но с изменением $ foo нет?
  • Shell Scripting: удаление или перемещение файлов из одного каталога, соответствующего именам файлов из другого каталога
  • Почему «Классы символов» предпочтительнее «Диапазоны символов» в «Шелл» (Bash)?
  • Трейлинг двоеточий и встроенная тестовая команда
  • Сохранение окон терминала в мяте
  • Почему терминальный эхосигнал нажатия клавиш при запуске команд?
  • Очистить половину экрана от командной строки
  • Повторное использование rsync -dry-run output
  • Можно ли сохранить вывод предыдущей команды в файле?
  • Значение переменной не распознается после использования gnu parallel?
  • grep не совпадает с выходом nc
  • Правило для вызова подоболочки в Bash?
  • 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 - лучшая ОС в мире.