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