Войти или зарегистрироваться

Совет Как сделать сервер отказоустойчивым

  • Автор темы Автор темы InterVi
  • Дата начала Дата начала
Ну и для чистки аккаунтов он понадобится.

Насчёт чистки аккаунтов - я по крону запускаю что-то типа этого:
find /world/players -type f -name L*.dat \! -newermt '5 month ago' -delete;
И аналогично для плагинов, хранящих инфу о игроках.
 
А хорошая идея - можно написать скрипт. И кстати я заметил что бэкап карты в 700мб + плагинов при выключенном сервере происходит почти моментально, так что можно добавить в скрипт старта запуск back.sh, чтобы каждый раз при перезапуске происходил бэкап. Просто я пока думаю как контролировать количество бэкапов чтобы память не закончилась. И тогда просто идеально будет.
 
А хорошая идея - можно написать скрипт. И кстати я заметил что бэкап карты в 700мб + плагинов при выключенном сервере происходит почти моментально, так что можно добавить в скрипт старта запуск back.sh, чтобы каждый раз при перезапуске происходил бэкап. Просто я пока думаю как контролировать количество бэкапов чтобы память не закончилась. И тогда просто идеально будет.


Как вариант - делать бэкап, после уже в отдельном каталоге архивировать бэкап, и складировать в одном месте. После уже по крону удалять старые бэки (я сам храню бэки за последние 4 дня, удаляя каждый день по одному устаревшему).
 
Как вариант - делать бэкап, после уже в отдельном каталоге архивировать бэкап, и складировать в одном месте. После уже по крону удалять старые бэки (я сам храню бэки за последние 4 дня, удаляя каждый день по одному устаревшему).
а как ты это сделал? я вот пока думаю как узнать самую старую папку
Все, разобрался. Запихнул скрипт в крон, пусть работает.
Код:
#!/bin/bash
DATE=`/bin/date '+%H:%M:%S-%d.%m.%Y'`
cd /root/backups/
NUM=$(ls -l | grep ^d |wc -l)
old=$(ls -t /root/backups/ | tail -n1)
if [ "$NUM" = "20" ]; then
echo "удаление старого бэкапа"
rm -rf /root/backups/$old/
echo 'создание папки'
mkdir /root/backups/$DATE
echo 'копирование карты'
cp -r /root/server/ /root/backups/$DATE/server/
echo 'копирование плагинов'
cp -r /root/plugins/ /root/backups/$DATE/plugins/
echo 'скопировано'
else
echo 'создание папки'
mkdir /root/backups/$DATE
echo 'копирование карты'
cp -r /root/server/ /root/backups/$DATE/server/
echo 'копирование плагинов'
cp -r /root/plugins/ /root/backups/$DATE/plugins/
echo 'скопировано'
fi
 
читай тему внимательней, прямо в шапке
 
читай тему внимательней, прямо в шапке
У меня когда я запускаю через *while : ; do sleep 10 && java -Xmx6000M -Xms6000M -jar /var/ftp/sr1/sr1.jar nogui; done* Он стартится без плагинов вообще ! и с 20 слотами . Что такое ? Как настроить ?
 
У меня когда я запускаю через *while : ; do sleep 10 && java -Xmx6000M -Xms6000M -jar /var/ftp/sr1/sr1.jar nogui; done* Он стартится без плагинов вообще ! и с 20 слотами . Что такое ? Как настроить ?
Допиши так и помести сшник в папку сервера
DIRECTORY=$(cd "`dirname "$0"`" && pwd)
(cd "$DIRECTORY"; java -Xmx30M -Xms30M -XX:MaxPermSize=40M -jar server.jar)
 
Если установлен Essentials, то можно создать скрипт автоматического бэкапа, указать его в конфиге и настроить там же период запуска бэкапа.
 
Темка протухла уже. Небольшие примеры из шапки в итоге стали вот этим: https://bitbucket.org/InterVi/vominator
Даже залив бэкапа на ядиск прикрутил, в то время когда он еще не умел нормально синхронизироватся (локально удаленные файлы попадали в корзину, забивая память).
 
Темка протухла уже. Небольшие примеры из шапки в итоге стали вот этим: https://bitbucket.org/InterVi/vominator
Даже залив бэкапа на ядиск прикрутил, в то время когда он еще не умел нормально синхронизироватся (локально удаленные файлы попадали в корзину, забивая память).
Спасибо, очень интересно. Я собираю сервер под винду и поэтому такой вопрос, если вдруг захочу перейти на линь, многое ли мне придется менять, кроме скриптов запуска и бэкапа?
 
Спасибо, очень интересно. Я собираю сервер под винду и поэтому такой вопрос, если вдруг захочу перейти на линь, многое ли мне придется менять, кроме скриптов запуска и бэкапа?
Не уверен насчет всех конфигов, никогда не генерировал ru_RU.CP1251. А так в принципе ничего не надо будет менять.
 
Не уверен насчет всех конфигов, никогда не генерировал ru_RU.CP1251. А так в принципе ничего не надо будет менять.
Еще раз спасибо, а насчет кодировки, то это проверяется опытным путем конечно же :nerd:
 
Защита от падения
Задача системы в том, чтобы предотвратить падение сервера в случае если VPS или VDS вдруг перезагрузится, вывалится сам сервер или кто-то из админов напишет /stop

Первый шаг - это использование цикла при запуске севрера
Код:
while : ; do sleep 10 && java -Xmx2000M -Xms2000M -jar /root/craftbukkit.jar nogui; done
sleep 10 - это таймаут перезапуска, если сервер действительно нужно остановить, то за это время можно успеть нажать CTRL+C и оборвать выполнение цикла/сессии screen

Второй шаг - скрипт автозапуска, на случай перезагрузки самого VPS/VDS
1. Идем в /usr/sbin/ и создаем там текстовый файл с уникальным именем, записав в него это:

Код:
#!/bin/sh
screen bash -c 'while : ; do sleep 10 && java -Xmx2000M -Xms2000M -jar /root/craftbukkit.jar nogui; done'

Знаю, что многие сидят под виндами, поэтому вот как можно сделать все через консоль:
nano /usr/sbin/minestart #копируем содержимое, CTRL+O, CTRL+X
chmod +x /usr/sbin/minestart

2. Прописываем скрипт в автозагрузку:
открываем /etc/rc.local и перед exit 0 вставлям путь до скрипта, в нашем случае /usr/sbin/minestart

nano /etc/rc.local

Подробнее об автозапуске здесь.

Немного о PEX
Это тоже важно, если продаются/раздаются админки. Вот ударит кому-нибудь моча в голову и он удалит полмира, что тогда?

Нужно не поленится прописать все ручками, вот мой пример:
Код:
 inheritance:
- User
- Moder
permissions:
- commandbook.*
- essentials.*
- worldedit.*
- iConimy.*
- ChestShop.*
- authme.admin.register
- anticheat.*
- clearlag.*
- mcjobs.*
- scavenger.*
- worldguard.stack
- worldguard.stack.illegitimate
- worldguard.stack.damaged
- worldguard.locate
- worldguard.fire-toggle.*
- worldguard.halt-activity
- worldguard.region.define
- worldguard.region.list
- worldguard.region.setpriority.own.*
- worldguard.region.teleport.*
- worldguard.region.setparent.own.*
- fly.*

Немного о WorldEdit
Совсем его запретить не очень хорошо, но волшебный топорик надо органичить. Для этого заходим в папку плагина и правим config.yml, вот так:
Код:
limits:
    allow-extra-data-values: false
    max-blocks-changed:
        default: 30000
        Admins: 30000
        Moder: 30000
        maximum: -1

Немного об автосохранении
Это тоже очень важно. Если сервер вывалится, будет полный вайп. Поэтому он должен регулярно выгружать изменения из оперативной памяти в файлы карты на жестком диске.

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

Я использую плагин AutoSaveWorld. Интервал автосохранения карты стоит 60 секунд, интервал автобэкапа - 86400 секунд (24 часа). А максимальное кол-во бэкапов - 20. Моих 20ГБ хватит и на 30-40, так что боятся не стоит.

часть config.yml
Код:
backup:
  enabled: true
  interval: 86400
  MaxNumberOfBackups: 20
  broadcast: true
  toextfolders: false
  disableintfolder: true
  pluginsfolder: true
  zip: false
  slowbackup: true
  worlds:
  - '*'
  warn: false
  warntime:
  - 0

P. S.
Эту ценную информацию я не смог найти, поэтому придумал все сам. Особенно важна первая часть, подобных решений я вообще нигде не видел, а ведь это важно.

Поэтому хотелось бы видеть эту тему в важных, ну или хотя бы первый кусок где-нибудь в другой важной теме.

Если есть мысли - дополняйте. Только прошу не флудить, а то многие ценности как всегда потеряются в горе бессмыслицы и пользователи их не найдут.


/usr/sbin/
можно скрипт в другом месте создать или в этом обязательно?
 
А можно как-то в цикл для перезапуска пихнуть screen -s, чтобы не приходилось в окне сидеть?
 
А для Debian?(9
 
Благодарю, тема действительно очень полезна! Ток вопрос. Разве ASW при сохранение мира с кулдауном 60 секунд не будет сильно нагружать серв?
 
Назад
Верх