Запуск команды в новом сеансе экрана не работает

Запуск команды в новом сеансе экрана не работает

Я хочу выполнить команду в новом сеансе экрана (и отсоединиться от него), но у меня это не получается. Я попытался запустить процесс в новом сеансе экрана и отсоединиться от него с помощью этого:

screen -d -m mycommmand

Но когда я пытаюсь подключиться к этому сеансу экрана с помощью

screen -r

Я получаю сообщение "Нет экрана для возобновления". Я также пытался запустить команду в новом сеансе экрана с помощью

screen mycommand

Когда я это делаю, запускается новый сеанс экрана, но команда не выполняется.

Команда представляет собой скрипт .sh, который запускает игровой сервер, но игровой сервер не запускается.

[Изменить] Поскольку некоторые люди просили дать точную команду, вот она: это скрипт bash, который должен запустить сервер Minecraft в отдельном сеансе экрана.

./startServer.sh

Вот скрипт .sh:

cd "/home/tim/minecraft/survivalServer"
screen -S "minecraft-server-1-14-4" -m -d /home/tim/java/bin/java -Xmx4096M -Xms1024M -jar /home/tim/minecraft/survivalServer/minecraft_server.1.14.4.jar nogui

Теперь проблема в том, что когда я запускаю скрипт, он не может создать новый сеанс экрана. Почему так?

Помощь очень ценится. Спасибо

решение1

Проблема в том, что вы пытаетесь запустить вложенный, отсоединенный экземпляр экрана внутри отсоединенного экземпляра экрана. Ваш скрипт содержит строку:

screen -S "minecraft-server-1-14-4" -m -d /home/tim/java/bin/java -Xmx4096M -Xms1024M -jar /home/tim/minecraft/survivalServer/minecraft_server.1.14.4.jar nogui

Это запускает screen, называет screen-сессию, minecraft-server-1-14-4затем запускает minecraft и отсоединяется. Но вы также пытаетесь запустить screen -d -m ./startserver.sh. Таким образом, до того, как screen-сессия будет создана в скрипте, вы уже запускаете скрипт внутри отсоединенной screen-сессии. Это... не всегда работает так хорошо.

Функционально это то же самое, что и это:

wolferz@khaos ~ $ screen -m -d screen -S 'mysession' -m -d top
wolferz@khaos ~ $ screen -r
There is a screen on:
        24850.mysession (07/24/2019 10:47:46 PM)        (Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be resumed.

То, что вам нужно сделать, это запустить скрипт напрямую. Просто сделайте ./startserver.sh. Это должно вернуть вас к приглашению. Затем вы можете подключиться к консоли Minecraft, выполнив screen -rобычные действия.

Связанный контент