Рейтинг:0

Как создать сценарий bash, который запускает сеанс экрана, который можно отключить и возобновить?

флаг eg

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

  1. переключить регулятор процессора на производительность
  2. используйте java для запуска файла server.jar

Используя команды терминала, которые я вводил screen -r java -Xmx6800M -Xms6800M -jar server.jar nogui из каталога /home/user/minecraft, где я сохранил все соответствующие файлы; Я предполагал, что смогу просто добавить эту команду в сценарий, и она запустит сеанс экрана, от которого можно будет отсоединиться. Использование bash для запуска скрипта с помощью этой команды запускает все как обычно, но всякий раз, когда я отсоединяюсь с помощью Ctrl+A Ctrl+D, он говорит «отсоединен от» и дает идентификатор сеанса для отсоединенного экрана... но затем с помощью screen -r или команды -ls показывают, что нет экранов для возобновления. Я знаю, что процесс все еще выполняется, потому что я все еще могу присоединиться к своему серверу.

На самом деле не уверен, что здесь происходит, но если есть способ написать сценарий, который будет запускать мой файл server.jar в сеансе, который можно отключить и возобновить, я был бы признателен за некоторые советы.

bmellot2 avatar
флаг eg
В качестве обновления, хотя я не могу найти какие-либо сеансы экрана для повторного подключения - использование команды экрана pkill завершает процесс Java, запущенный моим скриптом, так что, предположительно, где-то *есть* сеанс экрана? Я просто не могу понять, как найти и снова подключиться к нему после отключения
user10489 avatar
флаг in
На самом деле это вопрос не о bash-скриптах, а о том, как использовать screen. Вы не предоставили достаточно информации, чтобы определить, в чем проблема. Вы можете использовать ps, чтобы проверить, выполняется ли ваше задание Java. Возможно, вы запускаете экран и пытаетесь возобновить его от разных пользователей, или что-то удаляет конечные точки сокета экрана.
user535733 avatar
флаг cn
Таким образом, ваша команда запуска работает, и вы можете повторно подключиться к работающему сеансу, и вы обнаружили справочную страницу, в которой подробно описано, как составлять список сеансов. На какой вопрос вы хотите получить ответ? Совет: используйте systemd для запуска/остановки сервера вместо скрипта; это намного проще.
user10489 avatar
флаг in
Вам не нужно убивать работу, чтобы найти ее. Попробуйте ps или pgrep -f . В Ubuntu каталог сокета экрана должен находиться в /run/screen/, и вы должны искать там сокет экрана.
user10489 avatar
флаг in
Предположительно, вы запускаете его с экрана, чтобы вы могли взаимодействовать с ним позже. В противном случае я согласен с @user535733, что вы должны использовать для этого не экран, а скрипт systemd.
user535733 avatar
флаг cn
Ну, экран по-прежнему нужен для Java-сервера — мне не удалось заставить сервер Minecraft работать без него. Я обнаружил, что нет необходимости взаимодействовать с работающим сервером: все входные данные могут быть сделаны администратором на клиенте, а все выходные данные регистрируются. Что systemd делает, так это делает запуск, остановку и проверку состояния сервера очень простым, легко реализуемым в сценариях и унифицированным с другими службами.Основная задача Systemd заключается в наблюдении за службами, поэтому он также может использовать правильный инструмент для этой работы.
user535733 avatar
флаг cn
Моя собственная команда запуска (в файле systemd `minecraft.service`) это `ExecStart=screen -s mc -d -m java -server -Xms512M -Xmx1024M -jar server.jar nogui`
bmellot2 avatar
флаг eg
Да, я быстро понимаю, что, возможно, я все делаю неправильно - изначально думал, что crontab - единственный способ планировать задания при загрузке. Только что вернулся после того, как попробовал две основные команды обслуживания при перезагрузке в crontab - cpupower работает просто отлично, но я все еще не могу заставить сервер нормально запускаться ... команда, которую я имел, была ``@reboot screen -S minecraft java -Xmx6800M -Xms6800M -jar /home/filepath/server.jar nogui``` Предполагая, что это не удалось, может быть, потому, что каталоги работают иначе, чем root? Глядя на использование systemd сейчас - что такое аргумент ```-server``` после java? это новое для меня
bmellot2 avatar
флаг eg
«Итак, ваша команда запуска работает, и вы можете повторно подключиться к работающему сеансу, и вы обнаружили справочную страницу, в которой подробно описано, как составлять список сеансов. На какой вопрос вы хотите получить ответ?» Команда запуска работает, но я не могу повторно подключиться к работающему сеансу экрана после выхода из него - это очень странно, потому что он даже дает мне идентификатор сеанса, но затем ничего не появляется, используя screen -r/-ls или даже ps/pgrep - ф
флаг in
Tmux гораздо проще автоматизировать, чем screen.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.