Подтвердить что ты не робот

Как я могу использовать script GNU Screen для запуска программы внутри нее, чтобы она не выходила из сеанса при завершении программы?

Как я могу использовать script GNU Screen для запуска программы внутри нее, чтобы она не выходила из сеанса при завершении программы?

Я хочу запустить интерактивную программу в качестве демона, если я вручную запустил экран, а затем запустил эту программу внутри нее, все работает так, как я хочу. Если программа выйдет или сработает, сеанс экрана остается, и я могу посмотреть его, чтобы увидеть, что только что произошло. Однако, если я запускаю программу с простым запуском экрана, она запускается внутри экрана, но когда программа выходит из сеанса сеанса экрана, и любой выход из программы теряется.

Итак, screen –dmS serverName serverApplication не работает для моего сценария. Я действительно думал о создании script, который запускает программу, которую я хочу запустить, а затем спит навсегда, я мог бы запустить script одновременно с экраном и должен получить эффект, который я получаю, но он кажется довольно неопрятным способ сделать что-то, и я уверен, что должно быть что-то более элегантное.

Я прочитал довольно много учебных пособий по экранам и пробрался по странице руководства, но ничто не выскочит на меня, как правильный способ сделать это. Я попытался -X, но это для команд экрана, а не для запуска команд внутри сеанса экрана. Любые предложения будут очень оценены; Я даже рад использовать что-то другое, кроме экрана GNU, если есть лучший инструмент для использования в сценариях, но, пожалуйста, дайте мне пример, где это возможно.

(Боковое примечание: две вещи, с которыми я буду работать, - это minecraft_server и mythtv_backend. Мой план состоял в том, чтобы запустить их с работы с хроном при загрузке через некоторый ruby ​​/ bash script)

4b9b3361

Ответ 1

Во-первых, вы захотите запустить сеанс экрана демона, который запускает оболочку по умолчанию:

$ screen -dmS "serverName"

Затем отправьте команду в эту оболочку с помощью экрана stuff в сочетании с -X:

$ screen -S "serverName" -p 0 -X stuff "serverApplication$(printf \\r)"

-p важна для передачи экрана в окно в этом сеансе для заполнения команды. В этом случае это единственное доступное окно, 0, но если вы не укажете это, по какой-то нечетной причине ваша команда никуда не денется. $(printf \\r) посылает нажатие клавиши "Возврат". Обычный \n может работать на своем месте, но Я прочитал, что зависит от оболочки. Символ новой строки не работает в bash; Я могу ручаться за это.

Вот еще один классный трюк. Если вы хотите сделать еще одно окно в этом сеансе, вы можете:

$ screen -S "serverName" -X screen

Теперь вы можете отправлять команды этому, используя тот же синтаксис, что и выше, но с -p 1. Очень весело.