ВОПРОС: Автозапуск, Автозагрузка Dedicated Servers in Linux

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Сообщение
Автор
LEII4A
Лейтенант
Лейтенант
Сообщения: 213
Зарегистрирован: 22.08.2009
Откуда: оттуда
Благодарил (а): 1 раз

#16 Сообщение 21.09.2010, 15:35

pinkpiton2 писал(а):
LEII4A писал(а):cron руллез)
если у тебя серв падает от каждого чиха, то оно не столько рулез, сколько единственно возможное решение...
зачем держать такой сервер? :D хотя если в вопросе имели в виду автозагрузку после падения, то согласен крон не особо руллез
prankster

Аватара пользователя
xiloid
Капитан
Капитан
Сообщения: 341
Зарегистрирован: 30.10.2008
Поблагодарили: 3 раза

#17 Сообщение 23.09.2010, 21:20

Прошу прощения у автора этой темы, но задам здесь свой вопрос, что бы не создавать отдельную тему, тем более мой вопрос практически соответствует тематике :)
Есть такой вот плаг для ЕвентCкрипт для перезагрузки сервера. Плагин посылает стандартную команду quit. Один сервер (Зомби мод), на quit реагирует так (прописываю quit вручную в консоли сервера):

Код: Выделить всё

L 09/23/2010 - 20:05:13: server_message: "quit"
L 09/23/2010 - 20:05:13: Log file closed
L 09/23/2010 - 20:05:13: server_message: "restart"
[ZOMBIE] Free For All has been disabled.
./srcds_run: line 344: 10086 Ошибка сегментирования                   $HL_CMD
Add "-debug" to the ./srcds_run command line to generate a debug.log to help with solving this problem
Чтв Сен 23 20:05:13 EEST 2010: Server restart in 10 seconds
Ошибка сегментирования, ну это не суть важно, сервер перезагружается, что и требовалось.
Остальные два сервера просто закрываются по этой команде (прописываю quit вручную в консоли сервера, что аналогично работе вышеупомянутого плагина):

Код: Выделить всё

L 09/23/2010 - 20:23:44: server_message: "quit"
L 09/23/2010 - 20:23:44: Log file closed
L 09/23/2010 - 20:23:44: server_message: "restart"
[NativeTools] Unloaded successfully!
Чтв Сен 23 20:23:45 EEST 2010: Server Quit
bash-3.2#
Помогите вызвать ошибку сегментирования или как либо вызвать перезагрузку сервера. Спасибки.

Аватара пользователя
pinkpiton2
Майор
Майор
Сообщения: 724
Зарегистрирован: 06.08.2008
Откуда: Одесса
Благодарил (а): 1 раз
Поблагодарили: 1 раз

#18 Сообщение 24.09.2010, 10:06

xiloid писал(а):Прошу прощения у автора этой темы, но задам здесь свой вопрос, что бы не создавать отдельную тему, тем более мой вопрос практически соответствует тематике :)
Есть такой вот плаг для ЕвентCкрипт для перезагрузки сервера. Плагин посылает стандартную команду quit. Один сервер (Зомби мод), на quit реагирует так (прописываю quit вручную в консоли сервера):

Код: Выделить всё

L 09/23/2010 - 20:05:13: server_message: "quit"
L 09/23/2010 - 20:05:13: Log file closed
L 09/23/2010 - 20:05:13: server_message: "restart"
[ZOMBIE] Free For All has been disabled.
./srcds_run: line 344: 10086 Ошибка сегментирования                   $HL_CMD
Add "-debug" to the ./srcds_run command line to generate a debug.log to help with solving this problem
Чтв Сен 23 20:05:13 EEST 2010: Server restart in 10 seconds
Ошибка сегментирования, ну это не суть важно, сервер перезагружается, что и требовалось.
Остальные два сервера просто закрываются по этой команде (прописываю quit вручную в консоли сервера, что аналогично работе вышеупомянутого плагина):

Код: Выделить всё

L 09/23/2010 - 20:23:44: server_message: "quit"
L 09/23/2010 - 20:23:44: Log file closed
L 09/23/2010 - 20:23:44: server_message: "restart"
[NativeTools] Unloaded successfully!
Чтв Сен 23 20:23:45 EEST 2010: Server Quit
bash-3.2#
Помогите вызвать ошибку сегментирования или как либо вызвать перезагрузку сервера. Спасибки.
вообще-то по quit-у серв и должен закрыватся
формально тут всё правильно

тебе нужен в крон-е скрипт проверяющий состояние сервера и поднимающий его в случае неработоспособности
я как-то писал такое, но скрипт погиб из-за безголового админа
тут есть несколько подводных камней: нужно проверять факт, что серв ушел в перезагрузку сознательно, а не меняет карту или просто дуплит на поднятии какого-то из плагинов
чтение инструкции - 5$/строка.
чтение инструкции с выражением - 25$/строка.
чтение инструкции с пошаговым выполнением - прямо пропорционально тупости заказчика, но не менее 500$.

Krab1
Лейтенант
Лейтенант
Сообщения: 187
Зарегистрирован: 12.01.2009
Поблагодарили: 1 раз

#19 Сообщение 24.09.2010, 12:04

ну можно просто по порту чекать :) если порт открыт то пропускать если нет то стартовать сервер

правда это не всегда спасает но в теории должно работать если проверять по процессу то процесс может висеть, а сервер быть в дауне (если отключен авторестарт)
Последний раз редактировалось Krab1 24.09.2010, 12:07, всего редактировалось 1 раз.

Аватара пользователя
xiloid
Капитан
Капитан
Сообщения: 341
Зарегистрирован: 30.10.2008
Поблагодарили: 3 раза

#20 Сообщение 24.09.2010, 22:28

pinkpiton2
Krab1
Спасибо ребята за отклики! Черт с тем плагином, а если подойти к проблеме с другой стороны, перезагружать сервер по КРОНу, толи по Линевскому, то ли по внутриМАНИвскому (сомнительный вариант). Я не обладаю достаточным скиллом в скриптописании под Линем, может у Вас есть где-нибудь в заначке скрипт способный по крону перезагружать сервер? буду очень благодарен!

LEII4A
Лейтенант
Лейтенант
Сообщения: 213
Зарегистрирован: 22.08.2009
Откуда: оттуда
Благодарил (а): 1 раз

#21 Сообщение 24.09.2010, 23:36

xiloid писал(а):pinkpiton2
Krab1
Спасибо ребята за отклики! Черт с тем плагином, а если подойти к проблеме с другой стороны, перезагружать сервер по КРОНу, толи по Линевскому, то ли по внутриМАНИвскому (сомнительный вариант). Я не обладаю достаточным скиллом в скриптописании под Линем, может у Вас есть где-нибудь в заначке скрипт способный по крону перезагружать сервер? буду очень благодарен!
и я) prankster

tov_Mayor
Нович0к
Нович0к
Сообщения: 22
Зарегистрирован: 26.06.2008

#22 Сообщение 26.09.2010, 03:31

у меня второй год на 2х серверах пашет следующая система, состоящая из 2х скриптов (вот такой калабмбур):

1. Shell скрипты запуска серверов (в папке пользователя) (Пример для сервера Rune HoV _rune)

Код: Выделить всё

#!/bin/bash
#
# Init file for Rune HoV Server
#
# chkconfig: 35 90 12
# description: Rune: Halls of Valghallar
#
# source function library
SCREEN_NAME=Rune
GAME_PATH=/home/ugniy/.loki/rune/System

start()
{
cd $GAME_PATH && screen -AmdS $SCREEN_NAME ./ucc-bin server AR-Champions.run?game=Arena.ArenaGameInfo?mutator=
RFVotesPlus.RFVotesPlus?AdminName=Ragnarok?AdminPassword=1 LOG=server1.log
}
stop()
{
PID=`ps fax | grep $SCREEN_NAME | grep SCREEN | awk '{ print $1 }'`
kill $PID
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
В принципе пойдет любой скрипт понимающий start/stop/restart

2. Скрипт мониторинга на php (требует установленного пакета qstat, у меня размещен /usr/local/game):

Код: Выделить всё

<?php
# Описание серверов в формате:
# array ( 'игра', 'адрес', 'статус' ,'пользователь','скрипт запуска' 
# статус - указывает заданное состояние сервера: 0 - отключен, 1- включен
# пользователь - под какой учеткой работает игровой сервер
# скрипт запуска - должен понимать команду start, stop, restart.
# располагается в папке со скриптом перезапуска или указывать с полным путем к нему

$arr = array(
array('-hls','ugniy.ru:27015','1','ugniy','_cs15'),
array('-hls','ugniy.ru:27016','1','ugniy','_cs16_1'),
array('-hls','ugniy.ru:27018','0','ugniy','_cs16_2'),
array('-a2s','ugniy.ru:27022','1','ugniy','_css1'),
array('-a2s','ugniy.ru:27023','1','ugniy','_css2'),
array('-hls','ugniy.ru:27025','1','ugniy','_ts'),
array('-uns','ugniy.ru:7777','1','ugniy','_rune'),
array('-ut2004s','ugniy.ru:7707','1','ugniy','_kf') 
);
$i = 0;
$r_fp="";
for ($i = 0; $i < count($arr); $i++) {
$r_game = $arr[$i][0];
$r_ip = $arr[$i][1];
$r_status = $arr[$i][2];
$r_user = $arr[$i][3];
$r_cmd = $arr[$i][4];
$query = " qstat -u " . $r_game . " " . $r_ip ; 
exec($query,$r_fp);
if (empty($r_fp[1])){ 
if ($r_status==1)
{$r_cmd = "su " . $r_user ." ". $r_cmd . " restart";
system($r_cmd, $ret);
} 
else {}
}
else {
if ($r_status==0)
{$r_cmd = "su" . $r_user . " " . $r_cmd . " stop";
system($r_cmd, $ret);
}
else {}
}
$r_fp = "";
}
?>
Shell скрипты должны сообветсвовать по названиям указанным в PHP скрипте
Далее скрипт мониторинга на PHP опрашивается кроном каждую минуту, и при отсутствии ответа с данного порта - перезапускает сервер.

Отдельно автозапуск при включении сервера делать не надо, крон включит все в течении минуты.

Аватара пользователя
leha---83
Капитан
Капитан
Сообщения: 275
Зарегистрирован: 24.11.2008
Откуда: Perm (Chernushka)
Контактная информация:

#23 Сообщение 26.09.2010, 21:52

зачем все так сложно то
kill `ps -ef | awk '! /awk/ && /gg/ {print $2}'`; cd /home/game/gg/orangebox; ./start.sh > /dev/null
в крон по расписанию и все
gg это имя скрина
для удобсвта стоит webmin на консольном сервере
Изображение
Изображение

Krab1
Лейтенант
Лейтенант
Сообщения: 187
Зарегистрирован: 12.01.2009
Поблагодарили: 1 раз

#24 Сообщение 27.09.2010, 05:52

Это не то :) в твоем случае если сервак упадет тогда ждать следующего исполнения скрипта, а он у тебя стартует раз в день.

if [[ `netstat -anp | grep 7777` ]]
then
echo "SERVER ONLINE"
else
echo "Restarting server"
./script.sh restart
fi

вот банальный скрипт проверки на тот скрипт выложенный tov_Mayor
порт поменяешь положишь рядом с тем скриптом и в крон на каждые 5 минут допустим

если бы скрипт поддерживал вывод статуса, то можно было бы и по статусу делать рестарт

tov_Mayor
Нович0к
Нович0к
Сообщения: 22
Зарегистрирован: 26.06.2008

#25 Сообщение 27.09.2010, 08:04

Это РНР для локальныx серверов клуба:

Код: Выделить всё

<?php
# Описание серверов в формате:
# array ( 'игра', 'адрес', 'статус' ,'пользователь','скрипт запуска' 
# статус - указывает заданное состояние сервера: 0 - отключен, 1- включен
# пользователь - под какой учеткой работает игровой сервер
# скрипт запуска - должен понимать команду start, stop, restart.
# располагается в папке со скриптом перезапуска

$arr = array(
array('-a2s','169.254.82.20:27015','1','ugniy','/home/ugniy/start/csw.sh'),
array('-a2s','169.254.82.20:27016','1','ugniy','/home/ugniy/start/cs16.sh'),
array('-hls','169.254.82.20:27019','1','ugniy','/home/ugniy/start/tfc.sh'),
array('-hls','169.254.82.20:27021','1','ugniy','/home/ugniy/start/hl.sh'),
array('-hls','169.254.82.20:27022','1','ugniy','/home/ugniy/start/dod.sh'),
array('-hls','169.254.82.20:27025','1','ugniy','/home/ugniy/start/ts.sh'),
array('-a2s','169.254.82.20:27026','1','ugniy','/home/ugniy/start/aoc.sh'),
array('-a2s','169.254.82.20:27027','1','ugniy','/home/ugniy/start/pvkii.sh'),
array('-a2s','169.254.82.20:27028','1','ugniy','/home/ugniy/start/zps.sh'),
array('-a2s','169.254.82.20:27500','1','ugniy','/home/ugniy/start/l4d_v.sh'),
array('-a2s','169.254.82.20:27502','1','ugniy','/home/ugniy/start/l4d_c.sh'),
array('-a2s','169.254.82.20:27504','1','ugniy','/home/ugniy/start/l4d_s.sh'),
array('-a2s','169.254.82.20:27600','1','ugniy','/home/ugniy/start/l4d2.sh'),
array('-q3s','169.254.82.20:26000','1','ugniy','/home/ugniy/start/nex.sh'),
array('-uns','169.254.82.20:7777','1','ugniy','/home/ugniy/start/ut99.sh'),
array('-ut2004s','169.254.82.20:7707','1','ugniy','/home/ugniy/start/kf.sh')
);
$i = 0;
$r_fp="";
for ($i = 0; $i < count($arr); $i++) {
$r_game = $arr[$i][0];
$r_ip = $arr[$i][1];
$r_status = $arr[$i][2];
$r_user = $arr[$i][3];
$r_cmd = $arr[$i][4];
$query = " qstat -u " . $r_game . " " . $r_ip ; 
exec($query,$r_fp);
if (empty($r_fp[1])){ 
if ($r_status==1)
{$r_cmd = "su " . $r_user ." ". $r_cmd . " restart";
system($r_cmd, $ret);
} 
else {}
}
else {
if ($r_status==0)
{$r_cmd = "su " . $r_user . " " . $r_cmd . " stop";
system($r_cmd, $ret);
}
else {}
}
$r_fp = "";
}
?>
Мониторятся севера (по порядку)
2 CStrike 1.6
TeamFortress Classic
HLDM
Dayofdefeat
The Spesialists
Age of Chilavry
Pirates, Vikings, Knight 2
Zombie Panic
Left for Dead (3 сервера с разными режимами и один сервер на 2 L4D)
Nexuiz
UnrealTournament 99
Kiling Floor

Не могу только GTA samp прикрутить к этой системе. (

Добавлено спустя 9 минут 56 секунд:
Re: ВОПРОС: Автозапуск, Автозагрузка Dedicated Servers in Linux
Скрипт для отладки описания серверов в массиве. Просто выводит состояние серверов. Помешается в любое место на Web. Не забыть про обязательное наличие qstat

Код: Выделить всё

<?php
# Описание серверов в формате:
# array ( 'игра', 'адрес', 'статус' ,'пользователь','скрипт запуска' 
# статус - указывает заданное состояние сервера: 0 - отключен, 1- включен
# пользователь - под какой учеткой работает игровой сервер
# скрипт запуска - должен понимать команду start, stop, restart.
# располагается в папке со скриптом перезапуска

$arr = array(
array('-hls','169.254.82.20:27015','1','ugniy','cs16.sh'),
array('-hls','169.254.82.20:27016','1','ugniy','csw.sh'),
array('-a2s','ugniy.ru:27018','1','ugniy','csw.sh'),
array('-hls','169.254.82.20:27019','1','ugniy','tfc.sh'),
array('-hls','169.254.82.20:27021','1','ugniy','hl.sh'),
array('-hls','169.254.82.20:27022','1','ugniy','dod.sh'),
array('-hls','169.254.82.20:27025','1','ugniy','ts.sh'),
array('-a2s','169.254.82.20:27026','1','ugniy','aoc.sh'),
array('-a2s','169.254.82.20:27500','1','ugniy','l4d_v.sh'),
array('-a2s','169.254.82.20:27502','1','ugniy','l4d_c.sh'),
array('-a2s','169.254.82.20:27504','1','ugniy','l4d_s.sh'),
array('-a2s','169.254.82.20:27600','1','ugniy','l4d2.sh'),
array('-uns','169.254.82.20:7777','1','ugniy','ut99.sh'),
array('-q3s','169.254.82.20:26000','1','ugniy','nex.sh'),
array('-sa','169.254.82.20:7774','1','ugniy','gta.sh'),
array('-ut2004s','169.254.82.20:7707','1','ugniy','kf.sh'), 
array('-hls','csmania.com.ua:27015','1','Lik','27015'),
);

$i = 0;
$r_fp="";
for ($i = 0; $i < count($arr); $i++) {
$r_game = $arr[$i][0];
$r_ip = $arr[$i][1];
$r_status = $arr[$i][2];
$query = " qstat -u " . $r_game . " " . $r_ip ; 
exec($query,$r_fp);
if ($r_fp[1] == ""){ 
if ($r_status == 1)
{$r_cmd= $i . " " . $r_ip . " Sorry, Not Worked";} 
else {$r_cmd= $i ." " . $r_ip . " OK, Not Worked";}
}
else {
if ($r_status==0)
{$r_cmd = $i ." " . $r_fr[1] . " OOO, Worked?";}
else {$r_cmd = $i ." " . $r_fp[1] ." OK, Worked";}
}
echo $r_cmd . "<br>";
$r_fp = "";
}

?>
получится чтонить типа такого http://212.12.20.245/

Gordiy
Сержант
Сержант
Сообщения: 35
Зарегистрирован: 24.10.2009

#26 Сообщение 27.09.2010, 09:16

Народ ну что не могу я н как запустить l4d. НАпишите пожалуйста скрипт которым вы запускаете серваки? zps - запустил, cod4 запустил, а вот l4d не могу ни как в автозагрузку добавить, помогите пожалуйста со скриптом
есть вот такой вариант
#!bin/bash
RETVAL=0

path="/opt/l4d"

start() {
#start deamons
if [ -d $path ]; then
echo -n $"Starting l4d server: "
cd $path
./srcds_run l4d +ip 212.6.3.78 +hostport 27203 +exec server.cfg +map l4d_vs_airport01_greenhouse -pidfile cs.pid&
echo -n "[ ok ]
"
else
echo -n "[ FAILD ]
"
fi
}

stop() {
if [ -f $path/cs.run ]; then
killall hlds_run
killall hlds_i486
killall hlds_amd
cd $path
echo "Stpoing l4d server [ ok ]
"
else
echo -n "Stoping l4d [ FAILD ]
"
fi
}

status() {
cd $path;
pid=`$path/cs.pid`;
if [ -f $path/cs.pid ]; then
echo -n "l4d Main server is Up and
";
echo -n "Runing
";
fi
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit $RETVAL
подправьте если что нет так

tov_Mayor
Нович0к
Нович0к
Сообщения: 22
Зарегистрирован: 26.06.2008

#27 Сообщение 27.09.2010, 10:15

Скрипт ld4_c

Код: Выделить всё

#!/bin/bash
#
# Init file for Public CS1.6 Classic server
#
# chkconfig: 35 90 12
# description: Left4Dead Cooperative
#
# source function library
. /etc/rc.d/init.d/functions
SCREEN_NAME=L4D_coop
GAME_PATH=/home/ugniy/l4d_coop/l4d

start()
{
cd $GAME_PATH && screen -AmdS $SCREEN_NAME ./srcds_run -game left4dead +sv_lan 0 +ip 169.254.82.20 +map l4d_farm01_hilltop -master -port 27502 -heapsize 128000 $* +rcon_password LAN 
}
stop()
{
PID=`ps fax | grep $SCREEN_NAME | grep SCREEN | awk '{ print $1 }'`
kill $PID
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
Смени значение переменных SCREEN_NAME, GAME_PATH, IP и +rcon_password на свои и запускай

Gordiy
Сержант
Сержант
Сообщения: 35
Зарегистрирован: 24.10.2009

#28 Сообщение 27.09.2010, 10:39

заработало!!! уРЯЯЯ!!!

Аватара пользователя
xiloid
Капитан
Капитан
Сообщения: 341
Зарегистрирован: 30.10.2008
Поблагодарили: 3 раза

#29 Сообщение 28.09.2010, 11:03

leha---83
Krab1
Большое спасибо за помощь и полезные скрипты/команды, узнал много нового :)

Возник вопрос, в 7-01 перезагружаю все сервера командой:

Код: Выделить всё

kill `ps -ef | awk '! /awk/ && /gg/ {print $2}'`; cd /home/game/gg/orangebox; ./start.sh > /dev/null
После чего во всех консолях перестал читаться русский язык, кодировка стала неверная:

Код: Выделить всё

[SM] Ðо конÑа каÑÑÑ Ð¾ÑÑалоÑÑ 11:48
Есть у кого идеи почему так? Задание запускаю по CRONу, от имени пользователя ROOT, но сам захожу по ssh из-под другого пользователя, может ли у ROOTа быть что-то с кодировкой? :)

Krab1
Лейтенант
Лейтенант
Сообщения: 187
Зарегистрирован: 12.01.2009
Поблагодарили: 1 раз

#30 Сообщение 29.09.2010, 04:51

врятли это влияет :) в игре тоже самое? или только в консоле?

Ответить