- Поддерживаемые версии
- Отсутствует
Вступление
У всех бывали ситуации, когда сервер падал (или просто перезагружался) по разным причинам: у кого-то хостинг некачественный, у кого-то просто отключили свет и т.д. А после того, как сервер поднялся, приходится снова подключаться, открывать скрины, заходить в нужную директорию и запускать сервер. А задумывались ли вы, что этот процесс можно автоматизировать?
Оглавление
Представим, что у нас есть три сервера: для прокси, лобби и выживания. Каждый из них будет находиться по пути "/home/имя_пользователя/servers/". Название папки каждого сервера будет отражать его назначение (например, "proxy" для прокси-сервера и т.д.). Также в каждой папке сервера должен находиться файл запуска "start.sh". Конечно, можно было бы написать один большой скрипт для поднятия всех серверов и без "start.sh", но если потребуется изменить параметры для одного из серверов, придется заморачиваться. А мы ленивые, так что не будем ничего изобритать.
Шаги
Для начала определим, где будет храниться наш скрипт для открытия скринов и запуска серверов. Я выбрал создать дополнительную директорию в папке моего пользователя и назвать её "scripts" (туда же позже можно будет положить скрипты для бекапов и другое, если конечно имеется).
Далее создаём файл и называем его как угодно, главное — расширение должно быть ".sh".
Теперь вписываем в файл следующий скрипт:
Теперь нужно сделать так, чтобы наш скрипт запускался при старте ОС. Для этого переходим в "/etc/systemd/system" и создаём файл с любым названием, но обязательно с расширением ".service" (название запомните для последующих команд!). Я же назову его "mc_servers.service"
После создания файла открываем его и добавляем в него следующее содержимое:
Ещё одна важная вещь — необходимо установить формат конца строк для двух файлов в "LF", чтобы Linux мог их корректно обработать.
Вот как это можно сделать в Notepad++:
Завершающеая часть
Нужно указать systemd, что скрипт должен запускаться при старте сервера. Для этого используем следующие команды:
сhmod +x /home/имя_пользователя/scripts/mc_servers.sh # Укажите ваш путь
sudo systemctl daemon-reload
sudo systemctl enable mc_servers.service
У всех бывали ситуации, когда сервер падал (или просто перезагружался) по разным причинам: у кого-то хостинг некачественный, у кого-то просто отключили свет и т.д. А после того, как сервер поднялся, приходится снова подключаться, открывать скрины, заходить в нужную директорию и запускать сервер. А задумывались ли вы, что этот процесс можно автоматизировать?
Оглавление
Представим, что у нас есть три сервера: для прокси, лобби и выживания. Каждый из них будет находиться по пути "/home/имя_пользователя/servers/". Название папки каждого сервера будет отражать его назначение (например, "proxy" для прокси-сервера и т.д.). Также в каждой папке сервера должен находиться файл запуска "start.sh". Конечно, можно было бы написать один большой скрипт для поднятия всех серверов и без "start.sh", но если потребуется изменить параметры для одного из серверов, придется заморачиваться. А мы ленивые, так что не будем ничего изобритать.
Шаги
Для начала определим, где будет храниться наш скрипт для открытия скринов и запуска серверов. Я выбрал создать дополнительную директорию в папке моего пользователя и назвать её "scripts" (туда же позже можно будет положить скрипты для бекапов и другое, если конечно имеется).
Далее создаём файл и называем его как угодно, главное — расширение должно быть ".sh".
Теперь вписываем в файл следующий скрипт:
Bash:
#!/bin/bash
# Имя пользователя, от имени которого будут запускаться экраны
USER="groundbreaking"
# Директории серверов Minecraft
SERVER_DIRS=(
"/home/$USER/servers/vanila"
"/home/$USER/servers/auth"
"/home/$USER/servers/proxy"
)
# Названия сринов в которых будут запускаться сервера
# Заметьте что они должны идти в таком-же порядке как и сервера, то есть если мы хотим чтобы ванила запустилась в скрине с именем "vanila", то ставим их в список под одинаковыми номерами.
SCREEN_NAMES=(
"vanila"
"auth"
"proxy"
)
# Скрипт открытия скринов и вызова скрипта "start.sh"
for i in "${!SERVER_DIRS[@]}"; do
DIR="${SERVER_DIRS[i]}"
SCREEN="${SCREEN_NAMES[i]}"
if screen -list | grep -q "$SCREEN"; then
echo "Окно $SCREEN уже запущенно!"
else
if [ ! -d "$DIR" ]; then
echo "Директория $DIR не существует! Пропускаем сервер $SCREEN."
continue
fi
echo "Запускаем сервер $SCREEN..."
screen -S "$SCREEN" bash -c "cd $DIR && sh start.sh"
fi
done
Теперь нужно сделать так, чтобы наш скрипт запускался при старте ОС. Для этого переходим в "/etc/systemd/system" и создаём файл с любым названием, но обязательно с расширением ".service" (название запомните для последующих команд!). Я же назову его "mc_servers.service"
После создания файла открываем его и добавляем в него следующее содержимое:
INI:
[Unit]
Description=Minecraft Server Manager # Описание для нашего процесса
After=network.target # Когда он будет вызываться (при старте ОС)
[Service]
Type=oneshot # Процесс, который будет вызван по завершению
User=имя_пользователя # Имя нашего пользователя, от которого будет запущен скрипт
ExecStart=/home/имя_пользователя/scripts/mc_servers.sh # Путь до нашего скрипта
RemainAfterExit=false # Нужно ли поддерживать жизнь процесса даже после его завершения
[Install]
WantedBy=multi-user.target # Указываем, что процесс будет запущен на "уровне нашего юзера"
Ещё одна важная вещь — необходимо установить формат конца строк для двух файлов в "LF", чтобы Linux мог их корректно обработать.
Вот как это можно сделать в Notepad++:
Завершающеая часть
Нужно указать systemd, что скрипт должен запускаться при старте сервера. Для этого используем следующие команды:
сhmod +x /home/имя_пользователя/scripts/mc_servers.sh # Укажите ваш путь
sudo systemctl daemon-reload
sudo systemctl enable mc_servers.service
Если не хотите перезагружать машину, чтобы проверить, всё ли получилось, используйте команду:
sudo systemctl start mc_servers.service
sudo systemctl start mc_servers.service