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

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

  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 ответ

Решение

Способ 1

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

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

exec $SHELL

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

Способ 2

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

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

screen -dmS MySessionName

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

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

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

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