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