Я пытаюсь написать сценарий:
Запустить новый сеанс screen Запустить некоторую программу или скрипт в этом новом сеансе экрана Отсоединить от сеанса экрана, в то время как программа с шага 2 может все еще там работает. Если программа с шага 2 заканчивается, немедленно или позже, сеанс экрана должен оставаться включенным (отсоединенным).Я пробовал всевозможные комбинации с screen -X program или screen -S somename, а затем program, а затем screen -D, в сочетании с параметрами -d или -m, которые я нахожу в связанных вопросах и ответы, но ничего не работает.
Самое близкое, что я мог получить, это:
screen -S MySessionName -d -m myprogram
Это запускает новый сеанс экрана в backgroun, запуская myprogram. За исключением того, что myprogram заканчивается (иногда мгновенно), сеанс экрана заканчивается, тогда как я хочу, чтобы он работал.
Метод 1
Я создал демо-версию, описанную здесь на моей машине. Я также столкнулся с проблемой, о которой вы сообщили. Но добавление небольшой строки из script решило мою проблему.
Я добавил следующую строку в конце myprogram
exec $SHELL
После завершения вашего скрипта Bash процесс заменит себя новым вызовом самого себя.
Метод 1
Или вы можете попробовать следующий метод, в котором мы начинаем сначала detached screen и отправьте команду на этот экран с помощью stuff
Для этого сначала вам нужно запустить отдельный экран.
screen -dmS MySessionName
И затем отправить сценарий на этот экран. [!d9 ]
screen -S MySessionName -p 0 -X stuff 'myprogram\n'
Это также сработало для меня.
способ 1
я создал демо-установки вы описан здесь, в моей машине. Я тоже столкнулась с вопросом вы сообщили. Но добавив небольшой линии script решена моя проблема.
я добавил следующую строку в конце myprogram
exec $SHELL
после того, как ваш сценарий будет завершен, процесс Баш будет заменить себя новый вызов себе.
способ 1
, или вы можете попробовать следующий метод, в котором мы начинаем detached screen первый и отправить команду на экране с помощью stuff
для этого сначала нужно запустить отдельный экран.
screen -dmS MySessionName
, а затем отправить сценарий на экране.
screen -S MySessionName -p 0 -X stuff 'myprogram\n'
это также работает для меня.
Метод 1
Я создал демо-версию, описанную здесь на моей машине. Я также столкнулся с проблемой, о которой вы сообщили. Но добавление небольшой строки из script решило мою проблему.
Я добавил следующую строку в конце myprogram
exec $SHELL
После завершения вашего скрипта Bash процесс заменит себя новым вызовом самого себя.
Метод 1
Или вы можете попробовать следующий метод, в котором мы начинаем сначала detached screen и отправьте команду на этот экран с помощью stuff
Для этого сначала вам нужно запустить отдельный экран.
screen -dmS MySessionName
И затем отправить сценарий на этот экран.
screen -S MySessionName -p 0 -X stuff 'myprogram\n'
Это также сработало для меня.