Начать сеанс экрана и запустить скрипт, не подключаясь к нему?

Я пытаюсь написать скрипт для:

  1. Начать новый screen сеанс
  2. Запустить программу или скрипт в этом новом сеансе экрана
  3. Отключиться от сеанса экрана, в то время как программа из шага 2 все еще может там работать. Если программа из шага 2 завершается немедленно или позже, сеанс экрана должен оставаться запущенным (отсоединенным).

Я пробовал всевозможные комбинации с screen -X program или screen -S somename, затем program, затем screen -D, в сочетании с -d или -m вариантами, которые я нахожу в связанных вопросах и отвечает, но ничего не работает.

Самое близкое, что я мог получить, было это:

screen -S MySessionName -d -m myprogram

Это запускает новый сеанс экрана в фоновом режиме, запуская myprogram. За исключением случаев, когда myprogram заканчивается (иногда мгновенно), сеанс экрана заканчивается, тогда как я хочу, чтобы он продолжался.

1
задан 4 December 2017 в 21:46

1 ответ

Метод 1

Я создал демонстрационную установку, которую вы описали здесь, на моей машине. Я также столкнулся с проблемой, о которой вы сообщили. Но добавление небольшой строчки script решило мою проблему.

Я добавил следующую строку в конце myprogram

exec $SHELL

После того, как ваш скрипт завершится, процесс Bash заменит себя новым вызовом самого себя.

Метод 2

Или вы можете попробовать следующий метод, в котором мы сначала запускаем detached screen и отправляем команду на этот экран, используя stuff

Для сначала вам нужно запустить отдельный экран.

screen -dmS MySessionName

А затем отправьте сценарий на этот экран.

screen -S MySessionName -p 0 -X stuff 'myprogram\n'

Это также сработало для меня.

4
ответ дан 4 December 2017 в 21:46

Другие вопросы по тегам:

Похожие вопросы: