Использование экранной команды со сценарием запуска aws ec2 не работает

Я пытаюсь запустить сервер minecraft, как только мой экземпляр ec2 загружается (у него есть событие CloudWatch, чтобы останавливать и запускать экземпляр каждый день , поэтому при загрузке мне нужно запустить сервер)

Папка моего сервера находится в / home / ec2-user / minecraft / , и внутри этой папки у меня есть start-server.sh сценарий, который запускает следующую команду:

java -Xmx1024M -Xms1024M -jar minecraft_server.1.15.2.jar nogui

Я могу вручную использовать screen для запуска сервера в фоновом режиме, и он работает нормально, я могу выйти из сеанса ssh, а сервер все еще работает.

Но когда я пытаюсь использовать screen внутри сценария запуска, сеанс экрана не запускается. Ниже приведены 3 вещи, которые я пробовал до сих пор:

  1. Добавлен скрипт start-server-on-boot.sh внутри / var / lib / cloud / scripts / per-boot. с помощью следующей команды:

screen -dmS "minecraft" ~ / minecraft / start-server.sh

Я ожидал, что здесь будет запущен сеанс с отключенным экраном с сервером. Бег. Если я запускаю этот сценарий вручную из папки per-boot , он работает должным образом. Но когда это запускается во время запуска, это не работает (когда я подключаюсь к машине по ssh, сеанс экрана не создается)

Я проверил cloud-init.log для получения дополнительных сведений, и скрипт запустился без ошибок:

утилит.py [DEBUG]: выполнение команды ['/var/lib/cloud/scripts/per-boot/start-server-on-boot.sh'] с разрешенными кодами возврата [0] (оболочка = True, capture = False)

  1. Добавлен скрипт в файл /etc/rc.local . Также протестирован вручную, и он работает, но при загрузке экземпляра этого не происходит (сеанс экрана не создается).

  2. Добавлен скрипт User Data в мой экземпляр ec2 с той же командой screen , и он тоже не работает. Протестировано выполнение других команд, и те, которые работают (создан файл foo.txt )

Я также проверил cloud-init.log , и скрипт прошел без ошибок:

util.py [DEBUG]: Запуск команды ['/var/lib/cloud/instance/scripts/userdata.txt'] с разрешенными кодами возврата [0] (shell = True, capture = False)


Я считаю, что проблема в том, что сеанс экрана по какой-то причине прерывается.

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

0
задан 25 April 2020 в 08:54

1 ответ

В итоге возникла проблема с разрешением. Сценарии запуска AWS EC2 запускаются от имени пользователя root, поэтому он не смог найти ни команду java, ни папку minecraft, поскольку они были доступны только из ec2-пользователя. (это тот, с которым я работал по ssh)

Поэтому решение состояло в том, чтобы изменить команду из сценария start-server-on-boot.sh, который находится внутри /var/lib/cloud/scripts/per-boot на следующее:

runuser -l ec2-user -c 'screen -dmS "minecraft" ~/minecraft/start_server.sh'

Таким образом он смог найти как папку minecraft, так и команду java, и сеанс экрана был создан с включенным сервером

.
0
ответ дан 25 April 2020 в 13:23

Другие вопросы по тегам:

Похожие вопросы: