Есть ли способ запустить экран с фоновым процессом, но не завершить ли он при выходе из процесса?
Запуск сеанса экрана с фоновым процессом с использованием -d -m приводит к завершению сеанса экрана при выходе из процесса.
Есть ли какой-нибудь способ заставить сеанс экрана остаться после завершения процесса, но все же запустить его без какого-либо взаимодействия с пользователем?
3 ответа
Если ваш процесс может исходить из того, что /etc/profile
или же /etc/bash.bashrc
и их соответствующие $HOME
файлы, тогда это может работать для вас:
screen -d -m bash --init-file background-shell-script
Когда "background-shell-script" завершается, сеанс экрана будет ждать вас в приглашении оболочки, когда вы снова подключитесь с screen -r
, Если вы присоедините его еще до завершения процесса, вы увидите, какой вывод он создает, как он происходит, и получите подсказку оболочки после его завершения.
Чтобы получить исходные файлы запуска, добавьте их в начале вашего скрипта:
. /etc/profile
# more source statements, if needed
# do your stuff here
Может быть, если вы заключите вызов в сценарий оболочки и вызовете свою оболочку с возможностью сохранить ее работоспособной после завершения сценария.
Ключевым моментом здесь является то, что вы хотите, чтобы процесс отделился от управляющей оболочки или tty. Самый простой способ сделать это - просто запустить nohup, т.е. nohup независимо от процесса. man nohup для получения дополнительной информации.
Непонятно, почему вы хотите, чтобы сеанс экрана продолжался после завершения процесса. предположительно для захвата вывода, но это может быть легко перенаправлено.
Единственная причина использовать экран - если вы хотите, чтобы процесс запускался, но для управления ему все еще требуется стандартный ввод / вывод. В любом случае рекомендуется избегать этого, если это возможно, и просто использовать nohup, и, если это длительный процесс, интегрировать его в процесс загрузки машины как долго выполняющийся сервис.