Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.

Перенаправление команды сервера в консоль linux

Тема в разделе "Управление сервером Bukkit", создана пользователем Max0n, 15 июл 2016.

  1. Автор темы
    Max0n

    Max0n Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Max0n
    Здравствуйте. У меня есть сервер, который запускается так:
    #!/bin/bash
    while true
    do
    java -jar core.jar
    done
    и все это запускается в скрине. Соответственно, если сервер по каким-то причинам падает/останавливается - оператор wihle запускает его заново. Мне нужно, чтобы при вводе в консоль сервера команды /stop сервер останавливался, а не запускался снова. Единственное, к чему я пришел - надо, чтобы скрипт как-то считывал команды с сервера и выполнял остановку оператора while (который создает бесконечный цикл). Может быть это реализуемо с помощью оператора until или как-то по-другому? Иные варианты, типа "Убивай скрин вручную" не годятся. Спасибо!
     
    Последнее редактирование: 15 июл 2016
  2. Mr Hosting
  3. InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    InterVi
    Лог придётся анализировать, что команда действительно сработала, а не кто-то без прав её прописал. Либо только от консоли.
     
  4. Автор темы
    Max0n

    Max0n Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Max0n
    У меня был такой вариант. Поскольку сервер при остановке выводит "Stopping server", я сделал так.

    #!/bin/bash
    until [ /server/logs/latest.log | grep -oq " Stopping server" ]
    do
    java -jar server.jar
    done

    Оператор until зацикливает скрипт до тех пор, пока в логе не появится надпись "Server stopping". Но сервер почему-то после стопа включается снова. Как быть?
     
  5. InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    InterVi
    Снова небезопасно. А если игрок напишет это в чат? Надо придумывать проверку.
    Код (Text):
    1. #!/bin/bash
    2. until [grep -oq  "Stopping the server" /server/logs/latest.log]
    3. do
    4. java -jar server.jar
    5. done
     
  6. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    76
    Skype:
    DymethInfo
    Имя в Minecraft:
    Dymeth
    Могу предложить ещё один костыль.
    При остановке сервера создаётся файл.
    В while(true) (при каждом завершении процесса сервера) проверяется наличие этого файла. Если есть - выходим из цикла.
    И до цикла (при запуске скрипта) можно ещё этот файл удалять, если существует, конечно.

    Вариант не идеальный, но, по моему, это гораздо лучше, чем постоянно проверять вывод консоли и лог-файл.
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Skype:
    alexandr0116
    Юзать врапер и не ипать свой мозг.
     
  8. PYRO

    PYRO Активный участник Пользователь

    Баллы:
    78
    что там придумывать, попросту чекать регуляркой по началу строки
    Код (Text):
    1. grep ^\\[ logs/latest.log|cut -d " " -f4,5|grep ^CONSOLE:\\sStopping$
     
    Последнее редактирование: 18 авг 2016
  9. InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    InterVi
    игрок точно не пропишет потом это в чат? вот в чём уязвимость
    CONSOLE: Stopping
     
  10. PYRO

    PYRO Активный участник Пользователь

    Баллы:
    78
    Игрок не сможет писать в консоль на таком уровне. Регулярка ловит начало строки(иначе говоря - ищет источник сообщения), и строку: <Pyro> CONSOLE: Stopping проигнорирует.
    --- Сообщения объединены: 18 авг 2016, предыдущее сообщение: 18 авг 2016 ---
    Натрави команду на лог-файл сервера, увидишь, найдет лишь одно сообщение об остановке, как бы там игроки ни писали в чат.
    Команду чуть исправил, куда-то пропал пробел, пока вставлял на сайт.
     
  11. SaratovGermania

    SaratovGermania Новичок

    Баллы:
    6
    Имя в Minecraft:
    Hermanius
    а нельзя просто заказать в интернете?
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Skype:
    alexandr0116
    Все готовое уже есть, ртулкит называется - рестарт, заморозка, стоп сервера вместе с врапером. Но дурачки же не идут легким путем.
     

Поделиться этой страницей