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

Обсудим Авто запуск сервера на Ubuntu

Discussion in 'Управление сервером Bukkit' started by dirt34, Mar 24, 2016.

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

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    Подскажите пожалуйста. Есть два вопроса.
    1.
    Есть такой скрипт:
    Code:
    #!/bin/bash
    while :
    do
        ./start.sh
        echo "Waiting before restarting"
        sleep 10
    done
    start.sh:
    Code:
    java -server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts -Xms512M -Xmx6144M -Dfile.encoding=UTF-8 -jar KCauldron.jar nogui
    Вопрос. Как сделать так что бы сервер не стартовал заново если он был остановлен командой "stop"?
    И возможно ли сделать так что бы если сервер был перезапущен(от краша к примеру) отправлялось письмо на e-mail?

    2. Как сделать автозапуск сервера после включения виртуальной машины?

    Ubuntu
     
  2. Хостинг MineCraft
    <
  3. Will Orion Z

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

    Trophy Points:
    76
    Имя в Minecraft:
    willorion
    https://github.com/superjamie/minecraft-init-script
    А дальше уже сам разбирайся, это образец демона под систему инициализации Init-v. Там много лишних функций, больше половины можешь вычистить.
    Изначально рассчитан под лицензионные сервера.
     
  4. Alexgrist

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

    Trophy Points:
    173
    Remotetoolkit хорош для перезапуска, даже при зависаниях и крашах.
    А чтоб после ребута машинки скрипт начинал работать - добавляй в автозагрузку скрипт или просто в крон задачу.
     
  5. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    у меня лицензионный сервер. Спасибо.
    Как я добавлю в автозагрузку если будет стоять Remotetoolkit?
    Крон ставится на моей машине?
     
  6. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Точно так же, указав на главный скрипт.
    К примеру у меня такой главный скрипт.

    Code:
    cd "`dirname "$0"`";
    screen -S server1 sh rtoolkit.sh;
     
  7. _Spark_

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

    Trophy Points:
    78
    /etc/rc.local
     
  8. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    у меня нет такого.[DOUBLEPOST=1459146187,1459146140][/DOUBLEPOST]
    а остановить как?[DOUBLEPOST=1459168384][/DOUBLEPOST]@alexandrage хотелось бы изменить существующий у меня скрипт на старт и остановку отдельно. RToolKit мне не нужен - лишний.
    Скрипт запуска считай есть. Нужно скрипт остановки. Проблема в том что в скрипте старта бесконечный цикл... и при остановке он запустит снова сервер. Вопрос как сделать стоп так что бы он не запускался. Подскажи пожалуйста.
     
  9. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Отправить команду в скрин .stopwrapper для полной остановки. Все просто.
     
  10. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    зачем stopwrapper? у меня не будет RtoolKit. просто два скрипта на старт и запуск.

    И теперь вопрос в другом. как отправить команду скриптом? не вручную.
     
  11. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Ну тогда сам изобретай велосипеды, если врапер не не нравится.
     
  12. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    хэх. ладно.
    Как скриптом выполнить команду? не руками вписать а что бы скрипт см остановил.. что писать?
     
  13. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Тогда вот тебе костыль.
    Code:
    cd "`dirname "$0"`" echo "true" >restartserver while $restartserver; do java -jar spigot.jar read restartserver <"restartserver" done
    записываем в файл restartserver false и на сервер команду stop.
     
  14. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    @alexandrage
    Вот что я нарыл.
    Code:
    #!/bin/bash
    # /etc/init.d/cloudatlas
    
      ### BEGIN INIT INFO
      # Provides:   cloudatlas
      # Required-Start: $local_fs $remote_fs
      # Required-Stop:  $local_fs $remote_fs
      # Should-Start:   $network
      # Should-Stop:    $network
      # Default-Start:  2 3 4 5
      # Default-Stop:   0 1 6
      # Short-Description:    CloudAtlas
      # Description:    Starts the minecraft server
      ### END INIT INFO
    
    #Settings
    SERVICE='KCauldron.jar'
    USERNAME="Tsyklop"
    MCPATH='/home/Tsyklop/Server'
    ## If you have more than one Minecraft instance to control, add additional MCPATH
    ## variables below
    # MCPATH2='/home/mcuser/minecraft2'
    
    
    ME=`whoami`
    as_user() {
      if ["$ME" == "$USERNAME"] ; then
        bash -c "$1"
      else
        su - $USERNAME -c "$1"
      fi
    }
    
    mc_start() {
      if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
      then
        echo "Tried to start but $SERVICE was already running!"
      else
        echo "$SERVICE was not running... starting."
        cd $MCPATH
        as_user "cd $MCPATH && screen -dmS Server java -server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts -Xms512M -Xmx6144M -Dfile.encoding=UTF-8 -jar KCauldron.jar nogui"
        ## Add additional lines for additioanl Minecrat instances below here
        # as_user "cd $MCPATH2 && screen -dmS creative-mc java -Xmx2048M -Xms2048M -jar minecraft_server.jar nogui"
        sleep 7
        if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
        then
          echo "$SERVICE is now running."
        else
          echo "Could not start $SERVICE."
        fi
      fi
    }
    
    mc_stop() {
            if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
            then
                    echo "$SERVICE is running... stopping."
                    ## Add a line for each task for each Minecraft server you're controlling
                    as_user "screen -p 0 -S Server -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
                    # as_user "screen -p 0 -S creative-mc -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
                    as_user "screen -p 0 -S Server -X eval 'stuff \"save-all\"\015'"
                    # as_user "screen -p 0 -S creative-mc -X eval 'stuff \"save-all\"\015'"
                    sleep 10
                    as_user "screen -p 0 -S Server -X eval 'stuff \"stop\"\015'"
                    # as_user "screen -p 0 -S creative-mc -X eval 'stuff \"stop\"\015'"
                    sleep 7
            else
                    echo "$SERVICE was not running."
            fi
            if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
            then
                    echo "$SERVICE could not be shut down... still running."
            else
                    echo "$SERVICE is shut down."
            fi
    }
    
    #Start-Stop here
    case "$1" in
      start)
        mc_start
        ;;
      stop)
        mc_stop
        ;;
      restart)
        mc_stop
        mc_start
        ;;
      status)
        if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
        then
          echo "$SERVICE is running."
        else
          echo "$SERVICE is not running."
        fi
        ;;
    
      *)
      echo "Usage: /etc/init.d/cloudatlas {start|stop|status|restart}"
      exit 1
      ;;
    esac
    
    exit 0  
    При запуске он мне выдаёт такое:
    file.sh: 27: file.sh: [root: not found

    Что не так?
     
  15. Will Orion Z

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

    Trophy Points:
    76
    Имя в Minecraft:
    willorion
    :good:
     
  16. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    @InterVi Выше твоего поста есть мой пост. там Скрипт который я надыбал в инете. Там выдаёт ошибку. Можешь подсказать почему?
    Твой скрипт попробую. Спасибо
     
  17. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    Да. Может путь.... скрипт находится в папке Tsyklop....
     
  18. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    Захожу под свои пользователем. не с root.
     
  19. Krysinski

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

    Trophy Points:
    61
    Имя в Minecraft:
    Krysinski
    Я понял в чем может быть дело)
    В скрипте используются команды, доступные только root, например su:
    su - $USERNAME -c "$1"
    Сделай владельцем скрипта root, чтобы он запускался от его имени. Права на запуск дай всем, а вот на редактирование оставь только владельцу. Так как если ктото внесет в этот скрипт любую команду, она выполнится от root и произойдет бида)
     
  20. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    Хм. спасибо. попробую.[DOUBLEPOST=1459627154,1459619354][/DOUBLEPOST]
    я добавил тот скрипт в crontab моего юзера. он выполняется корректно но ошибка напрягает.
     
  21. Автор темы
    dirt34

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

    Trophy Points:
    143
    Skype:
    alucid2
    Имя в Minecraft:
    dirt34
    не могу знать. я не вижу этого. Я не знаю как посмотреть лог кронтаба.[DOUBLEPOST=1459668502,1459667573][/DOUBLEPOST]@InterVi твой скрипт ведь можно запускать с помощью крона?
     

Share This Page