Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

История благодарностей участнику stonemct ::: Спасибо сказали: 4
Дата поста: В теме: За сообщение: Спасибо сказали:
10.2.2013, 15:55 Скрипт запуска HLDS-серверов + Source NEW
Цитата(proaid @ 10.2.2013, 15:57) *
Ребят чет у меня все ероглифами и я с linux связался недавно и не знаю что в данном скрипте отвечает и как бы не нопртачить не могли бы вы перевести его?
Скрытый текст
#!/bin/bash
# chkconfig: 2345 95 20
# description: HLDS Start Script
# Start HLDS Server
# processname: hlds
# author: LeXiKoN http://eqline.ru
# version: 0.98

# Source function library.
. /etc/rc.d/init.d/functions

VERSION=0.98

#####################################################
# Конфигурирование
#####################################################

SERVER_NAME="My Server" #Название сервера
screen_name=server #Название screen-сессии
path="/home/hlds/server/" #Путь до ROOT-директории сервера
hlds_ip=0.0.0.0 #IP сервера
hlds_port=27015 #Порт сервера
hlds_gametype=cstrike #РўРёРї РёРіСЂС‹
hlds_players=20 #Максимальное количество игроков на сервере
hlds_map=de_inferno #Р?РјСЏ первоначальной карты РїСЂРё запуске
hlds_pid=server.pid
screen_pid=$screen_name-screen.pid
hlds_options="-pingboost 3 +exec server.cfg +log on" #Дополнительные параметры запуска
use_user=hlds #Р?РјСЏ юзера РѕС‚ которого запускается сервер
condebug=1
check_version=0
checker_command="quakestat" #Команда пакета qStat отвечающего за проверку сервера
restarttime=10 #Время после которого сервер будет перезагружен ( выводится в чат на сервере )

#----------------------------------------------------
# Номер ядра/процессора в линуксе
# 2х-ядерные: 0 - первое ядро, 1 - второе ядро
# 4x-ядерные: 0 - первое ядро ... 3 - четвертое ядро
# По аналогии с другими многоядерными процессорами
use_core=0
#----------------------------------------------------

################# Р’РќР?РњРђРќР?Р• ###################
#
# Строчки ниже, если не знаете, лучше не трогать!
#
################# Р’РќР?РњРђРќР?Р• ###################
RETVAL=0

succes="[\033[1;32m РћРљ \033[0m]"
failed="[\033[1;31m FAIL \033[0m]"
status_on="[\033[1;32m ONLINE \033[0m]"
status_off="[\033[1;31m OFFLINE \033[0m]"
title="\033[1;34m [>>]\033[0m"

if [ "$condebug" -eq 1 ]; then
hlds_options2="-condebug"
fi

# Команда screen
INTR="taskset -c $use_core /usr/bin/screen -A -m -d -S $screen_name"

if [ ! -x $path/hlds_run ]; then
printf "\033[22;31m Проверьте права на исполнение hlds_run \033[0m\n"
exit 1
fi

prestart_check() {
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf "$title\033[1;34m Сервер $SERVER_NAME\033[0m \033[32m(!!) на данный момент УЖЕ работает (!!)\033[0m\n"
exit 1
else
rm -rf $path/$screen_pid
rm -rf $path/$hlds_pid
fi
fi
}

start() {
if [ "$check_version" -eq 1 ]; then
check_version
fi
# Проверка престартовая
prestart_check
cd $path
# Запускаем сервер
$INTR sudo -u $use_user ./hlds_run -game $hlds_gametype +maxplayers $hlds_players +map $hlds_map +ip $hlds_ip +port $hlds_port $hlds_options $hlds_options2 -pidfile $hlds_pid
# Поиск и запись пидов процессов сервера и скрина в системе
ps -ef | grep SCREEN | grep "$screen_name" | grep -v grep | awk '{ print $2}' > $path/$screen_pid
printf "$title\033[1;34m Запуск сервера $SERVER_NAME \033[0m\n"
printf "\t\033[1;35m Порт севрера:\033[0m \033[1;36m$hlds_port\033[0m\n"
printf "\t\033[1;35m РџСЂРёРІСЏР·РєР° Рє СЏРґСЂСѓ:\033[0m \033[1;36m$use_core\033[0m\n"
printf "\t\033[1;35m Запуск от юзера:\033[0m \033[1;36m$use_user\033[0m\n"
printf "\t\033[1;33m Статус: \033[0m"
sleep 1
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf "$succes\n"
else
printf "$failed\n"
fi
fi
}

stop() {
if [ "$check_version" -eq 1 ]; then
check_version
fi
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
# Завершаем КОРРЕКТНО сервер!!
printf "$title\033[1;31m Остановка $SERVER_NAME \033[0m"
/usr/bin/screen -R $screen_name -p 0 -X register . quit
/usr/bin/screen -R $screen_name -p 0 -X paste .
/usr/bin/screen -R $screen_name -p 0 -X stuff $'\n'
sleep 1
/usr/bin/screen -R $screen_name -X quit > /dev/null
sleep 1
rm -rf $path/$screen_pid
rm -rf $path/$hlds_pid
printf "$succes\n"

else
printf "\033[1;34m Невозможно остановить $SERVER_NAME, сервер НЕ запущен \033[0m"
printf "$failed\n"
fi
}

status() {
if [ "$check_version" -eq 1 ]; then
check_version
fi
printf "$title\033[1;34m Статус сервера $SERVER_NAME \033[0m\n"
printf "\t\033[1;35m Порт севрера:\033[0m \033[1;36m$hlds_port\033[0m\n"
printf "\t\033[1;35m Привязан к ядру:\033[0m \033[1;36m$use_core\033[0m\n"
printf "\t\033[1;35m Запущен от юзера:\033[0m \033[1;36m$use_user\033[0m\n"
printf "\t\033[1;33m Статус: \033[0m"
sleep 1
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf "$status_on\n"
else
printf "$status_off\n"
fi
}

console() {
if [ "$check_version" -eq 1 ]; then
check_version
fi
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
printf "$title\033[1;34m Подключение к консоли $SERVER_NAME сервера \033[0m\n"
printf "\t\033[36m Для выхода из консоли поочерёдно нажать \033[1;36mCtrl+A, D \033[0m\n"
printf "\t\033[36m Для листинга консоли поочерёдно нажать \033[1;36mCtrl+A, Esc \033[0m\n"
printf "\t\033[36m Для выхода из режима листинга нажать \033[1;36mEsc \033[0m\n"
printf "\t\033[1;31m Внимание!!! По неаккуратности можно положить сервер :D \033[0m\n"
concnt=5
while [ $concnt -gt 0 ]; do
echo -en "\r\t Консоль включится через $concnt сек "
let concnt=concnt-1
sleep 1
done
/usr/bin/screen -R $screen_name
printf "\t$succes\n"
else
printf "\033[1;31m Невозможно подключиться к $SERVER_NAME, сервер не запущен \033[0m\n"
fi
}

compile() {
if [ "$check_version" -eq 1 ]; then
check_version
fi
if [ -d $path/cstrike/addons/amxmodx ]; then
printf "$title\033[32m Компиляция плагинов AmxModX \033[0m\n"
printf "\t\033[36m Компилируются исходные файлы (sma), находящиеся в директории {addons/amxmodx/scripting/*.sma} \033[0m\n"
printf "\t\033[36m По завершению компиляции нажмите Q для выхода \033[0m\n"
printf "\t\033[36m Компиляция начнется через 2 секунды. \033[0m\n"
sleep 2
cd $path/cstrike/addons/amxmodx/scripting
./compile.sh
printf "\t\033[32m Плагины скомпилированы \033[0m $succes\n"
else
printf "\033[22;31m Проверьте установлен ли AmxModX (??) \033[0m $failed\n"
fi
}

check_version() {
printf "$title\033[1;34m Проверка обновлений скрипта \033[0m\n"
cd $path
rm -f version.txt
wget http://eqline.ru/project/hlds_init_script/version.txt 1> /dev/null 2>&1
printf "\t Загрузка "
updcnt=3
while [ $updcnt -gt 0 ]; do
printf "."
let updcnt=updcnt-1
sleep 1
done
sleep 1
printf "\n"
for ver in `cat $path/version.txt`
do
if [ $VERSION \< $ver ]; then
printf "\t\033[1;31m Доступна новая версия скрипта ( $ver )\033[0m\n"
printf "\t\033[36m Подробнее на форуме eQline.ru: http://forum.eqline.ru \033[0m\n"
printf "\t\033[1;36m Ссылка: http://forum.eqline.ru/topic/361-СЃРєСЂРёР...ерверов/ \033[0m\n"
else
printf "\t\033[1;36m Ваша версия является последней\033[0m \033[1;34m( Текущая версия: $VERSION ) \033[0m\n"
fi
break
done
rm -f version.txt
}

check_logsize() {
printf "$title\033[1;34m Проверка размера .log файлов \033[0m\n"
maxlogsize=10485760
if [ -f $path/checker.log ]; then
sizeCheckUP=`stat -c%s $path/checker.log`
printf "\t\033[1;36m Размер checker.log:\033[0m \033[1;35m $sizeCheckUP байт\033[0m\n"
if [ "$sizeCheckUP" -ge "$maxlogsize" ]; then
printf "\t\033[1;31m Очищаю файл checker.log\033[0m\n"
tail -n 50 $path/checker.log > $path/checker.temp
mv $path/checker.temp $path/checker.log
sleep 1
fi
else
printf "\t\033[1;31m Файл checker.log отсутствует\033[0m\n"
fi
if [ -f $path/cstrike/qconsole.log ]; then
sizeQconsole=`stat -c%s $path/cstrike/qconsole.log`
printf "\t\033[1;36m Размер qconsole.log:\033[0m \033[1;35m $sizeQconsole байт\033[0m\n"
if [ "$sizeQconsole" -ge "$maxlogsize" ]; then
printf "\033[1;31m Очищаю файл qconsole.log\033[0m\n"
tail -n 50 $path/cstrike/qconsole.log > $path/cstrike/qconsole.temp
mv $path/cstrike/qconsole.temp $path/cstrike/qconsole.log
sleep 1
fi
else
printf "\t\033[1;31m Файл qconsole.log отсутствует\033[0m\n"
fi
}

checker() {
checktag="[HLDS-CheckUP]"
checkresponse=`$checker_command -P -a2s $hlds_ip:$hlds_port | grep response`
if [ -n "$checkresponse" ]; then
printf "\033[1;37m$checktag\033[0m $SERVER_NAME \033[31m*[No response]*\033[0m\n"
# echo Отсылаем почту
cd $path
time=`date +%X`
date=`date +%D`
inlog=`$checker_command -P -a2s $hlds_ip:$hlds_port | grep response`
printf "[$time - $date] *[No response]* $inlog\n" >> checker.log
stop
sleep 2
start
sleep 1
echo ----------------ATTANTION---------------- >> checker.log
printf "StartUP $SERVER_NAME:" >> checker.log
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf " *[OK]* \n" >> checker.log
else
printf " *[FAILED]* \n" >> checker.log
fi
echo ----------------------------------------- >> checker.log
exit 1
fi
checkdown=`$checker_command -P -a2s $hlds_ip:$hlds_port | grep DOWN`
if [ -n "$checkdown" ]; then
printf "\033[1;37m$checktag\033[0m $SERVER_NAME \033[31m*[DOWN]*\033[0m\n"
# echo Отсылаем почту
cd $path
time=`date +%X`
date=`date +%D`
inlog=`$checker_command -P -a2s $hlds_ip:$hlds_port | grep DOWN`
printf "[$time - $date] *[DOWN]* $inlog\n" >> checker.log
stop
sleep 2
start
sleep 1
echo ----------------ATTANTION---------------- >> checker.log
printf "StartUP $SERVER_NAME:" >> checker.log
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf " *[OK]* \n" >> checker.log
else
printf " *[FAILED]* \n" >> checker.log
fi
echo ----------------------------------------- >> checker.log
exit 1
fi
checkup=`$checker_command -P -a2s $hlds_ip:$hlds_port | grep cstrike`
if [ -n "$checkup" ]; then
printf "\033[1;37m$checktag\033[0m $SERVER_NAME \033[32m*[OK]*\033[0m\n"
cd $path
time=`date +%X`
date=`date +%D`
inlog=`quakestat -P -a2s $hlds_ip:$hlds_port | grep cstrike`
printf "[$time - $date] *[OK]* $inlog\n" >> checker.log
exit 1
fi
}

prerestart() {
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
printf "$title\033[1;31m Начинается отчет до рестарта $SERVER_NAME \033[0m\n\t"
cnt=$restarttime
while [ $cnt -gt 0 ]; do
/usr/bin/screen -R $screen_name -p 0 -X register . "say Server has been restart after $cnt seconds!"
/usr/bin/screen -R $screen_name -p 0 -X paste .
/usr/bin/screen -R $screen_name -p 0 -X stuff $'\n'
echo -en "\r\t Рестарт через $cnt сек"
let cnt=cnt-1
sleep 1
done

/usr/bin/screen -R $screen_name -p 0 -X register . "say ============================================="
/usr/bin/screen -R $screen_name -p 0 -X paste .
/usr/bin/screen -R $screen_name -p 0 -X stuff $'\n'

/usr/bin/screen -R $screen_name -p 0 -X register . "say [ SERVER SHUTTING DOWN ]"
/usr/bin/screen -R $screen_name -p 0 -X paste .
/usr/bin/screen -R $screen_name -p 0 -X stuff $'\n'

/usr/bin/screen -R $screen_name -p 0 -X register . "say ============================================="
/usr/bin/screen -R $screen_name -p 0 -X paste .
/usr/bin/screen -R $screen_name -p 0 -X stuff $'\n'

printf "$succes\n"
fi

}

case "$1" in
start)
check_logsize
start
;;
stop)
stop
;;
restart)
prerestart
sleep 2
stop
sleep 2
start
;;
status)
status
;;
console)
console
;;
compile)
compile
;;
update)
check_version
;;
checker)
checker
;;
logsize)
check_logsize
;;
*)
echo "Usage: $0 {start|stop|restart|status|console|compile|update|checker|logsize}"
exit 1
esac
exit 0



не в той кодировке открыл
тебе надо добыть прогу notepad++ и в ней открыть файл и сохранить в кодировке UTF
c другой стороны это в соновном комментарии так что можно их опустить скрипт будет все равно работать
proaid
17.1.2012, 18:11 Скрипт запуска HLDS-серверов + Source NEW
Цитата(CityTomsk @ 17.1.2012, 11:46) *
cut
Перезагрузил машину, пишет
Код
Invalid game type 'cstrike' sepecified.
Tue Jan 17 13:31:57 NOVT 2012: Server Failed
Auto detecting CPU
Using AMD Optimised binary.
Half-life binary './hlds_amd' not found, exiting
Tue Jan 17 13:31:57 NOVT 2012: Server Failed
exec: ./hlds_amd: not found

Права на файл в автозагрузке 555
Файлы hlds_run и hlds_amd 754

Что не так???


  • первое вы меня конечно извините, но вы не могли бы изменить свое сообщение в котором ваш скрипт не в спойлере( в данном форуме спойлер работает с ошибкой поэтому после добавления
    Код
    [spoiler][/spoiler]
    измените первый тег на
    Код
    [spoiler=название вашего спойлера типа "мой скрипт запуска"]
  • грубо говоря...
    скрипт говорит что у вас нет файлов (аналог в винде *.exe)
    в последнем посте hlds_amd
    и в пред предыдущем hlds_i686
    это говорит о том что вы запускаете не из той директории
  • скиньте листинг ls -l $path
  • а так у вас ошибка в скрипте
    вы устанавливаете переменную path
    Код
    screen_name=27015                                    #Название screen-сессии
    path=/usr/serv/hlds/$screen_name                    #Путь до ROOT-директории сервера

    теперь $path=/usr/serv/hlds/27015

    и используете второй раз $screen_name
    Код
    /usr/local/bin/screen -A -m -d -S $screen_name $path/$screen_name/hlds_run -console -game $hlds_gametype +maxplayers $hlds_players +map $hlds_map +ip $hlds_ip +port $hlds_port -pidfile $hlds_pid -debug

    и у вас получается команда запуска
    Код
    /usr/local/bin/screen -A -m -d -S $screen_name /usr/serv/hlds/[b]27015[/b]/[b][color="#FF0000"]27015[/color][/b]/hlds_run -console -game **замнем для краткости**
  • и мой вас совет в функции start сразу после {
    выполните команду
    cd $path
CityTomsk