Начать сеанс экрана и запустить скрипт, не подключаясь к нему?
Я пытаюсь написать скрипт для:
- Начать все заново
screen
сессия - Запустите программу или скрипт в этом новом сеансе экрана
- Отключиться от сеанса экрана, в то время как программа из шага 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'
Это также сработало для меня.