Удобный скрипт запуска сервера кс :) |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Удобный скрипт запуска сервера кс :) |
330863 |
24.2.2011, 22:02
Сообщение
|
|
Hitmaaaaan,
ты можеш выполнить то что я попросил ? empy, возможно сервер незапускаеться толком ,или чтото ему мешает ,я так думаю |
|
|
empy |
24.2.2011, 22:28
Сообщение
|
Ну так что делать то?
|
|
|
|
Hitmaaaaan |
25.2.2011, 18:06
Сообщение
|
|
Hitmaaaaan, ты можеш выполнить то что я попросил ? server_pub #!/bin/sh # # authors: LeXiKoN & Puma http://eqline.ru & https://c-s.net.ua # version: 1.09 # Source function library. #. /lib/lsb/init-functions VERSION="1.09" ##################################################### # Configuration ##################################################### server_name="Public Server" #Название сервера screen_name="test" #Название screen-сессии use_user="h****" #Имя юзера от которого запускается сервер path="/home/hitman/hlds/hlds/hlds_pub" #Путь до ROOT-директории сервера (без /в конце) hlds_ip="178.74.232.221" #IP сервера ,не ставить 0.0.0.0 hlds_port="27015" #Порт сервера hlds_players="25" #Максимальное количество игроков на сервере hlds_map="de_dust2_2x2" #Имя первоначальной карты при запуске hlds_options1="-pingboost 1 -debug +rcon_password *****8 +sv_lan 0 -noipx -insecure " #Дополнительные параметры запуска condebug="1" #Включить логи в файле qconsole.log из папки cstrike priority="-10" #Приоритет для сервера (-20 - Высокий ;20 - Низкий) usecore="1" #Привязка к процессору (0, 1, 2, 3) allcore="0,1" #Пропишите числа ядров ,начиная с 0 (0,1 - двухядерный) hlds_pid="$screen_name.pid" #Имя pid файла сервера screen_pid="$screen_name-screen.pid" #Имя pid файла screen-a clear_logs="0" # очишать лог файлы при запуске сервера через скрипт? clear_cache="0" # очишать кэши системы перед запуском сервера? # работает только под рутом start_cmd="/usr/bin/screen -AmdS $screen_name" checker_cmd="$path/quakestat" #Команда пакета qStat отвечающего за проверку сервера hlds_pid_num=`cat $path/$hlds_pid` #Определяет число pid от сервака ##################################################### # End of configuration ##################################################### succes="[ ОК ]" failed="[ FAIL ]" status_on="[ Online ]" status_off="[ Offline ]" title="[$hlds_ip:$hlds_port]" if [ $condebug = 1 ]; then hlds_options2="-condebug" fi if [ ! -x $path/hlds_run ]; then printf "$title Check run privileges of hlds_run" exit 1 fi clear_logs() { if [ $use_user == root ]; then rm -f $path/debug.log rm -f $path/cstrike/qconsole.log rm -f $path/cstrike/logs/*.log rm -fr $path/cstrike/addons/amxmodx/logs/*.log else sudo -u $use_user rm -f $path/debug.log sudo -u $use_user rm -f $path/cstrike/qconsole.log sudo -u $use_user rm -f $path/cstrike/logs/*.log sudo -u $use_user rm -fr $path/cstrike/addons/amxmodx/logs/*.log fi printf "$title Log Cleared\n" } prestart_check() { if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then ch=`ps -ef | grep SCREEN | grep $hlds_port` if [ -n "$ch" ]; then printf "$title $server_name already its working (!!)\n" exit 1 else cd $path rm -rf $path/$screen_pid rm -rf $path/$hlds_pid fi fi } start() { prestart_check cd $path if [ $clear_logs == 1 ]; then clear_logs fi if [ $use_user == root ]; then if [ $clear_cache == 1 ]; then echo 3 > /proc/sys/vm/drop_caches fi $start_cmd ./hlds_run -game cstrike +maxplayers $hlds_players +map $hlds_map +ip $hlds_ip +port $hlds_port $hlds_options1 $hlds_options2 -pidfile $hlds_pid ps -ef | grep SCREEN | grep "$hlds_port" | grep -v grep | awk '{ print $2}' > $path/$screen_pid printf "$title Starting $server_name\n" sleep 1 hlds_pid_num=`cat $path/$hlds_pid` taskset -pc $usecore $hlds_pid_num renice -n $priority -p $hlds_pid_num else $start_cmd sudo -u $use_user ./hlds_run -game cstrike +maxplayers $hlds_players +map $hlds_map +ip $hlds_ip +port $hlds_port $hlds_options1 $hlds_options2 -pidfile $hlds_pid ps -ef | grep SCREEN | grep "$hlds_port" | grep -v grep | awk '{ print $2}' > $path/$screen_pid printf "$title Starting $server_name\n" sleep 1 hlds_pid_num=`cat $path/$hlds_pid` sudo taskset -pc $usecore $hlds_pid_num sudo renice -n $priority -p $hlds_pid_num fi } stop() { if [ $use_user == root ]; then if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then kill `cat $path/$screen_pid` sleep 1 rm -rf $path/$screen_pid rm -rf $path/$hlds_pid printf "$title Stopping of $server_name\n" else printf "$title Cannot stop $server_name, server not started\n" fi else if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then sudo -u $use_user kill `cat $path/$screen_pid` sleep 1 sudo -u $use_user rm -rf $path/$screen_pid sudo -u $use_user rm -rf $path/$hlds_pid printf "$title Stopping of $server_name\n" else printf "$title Cannot stop $server_name, server not started\n" fi fi } status() { printf "$title Status of $server_name\n\n" if [ $use_user == root ]; then $checker_cmd -retry 10 -interval 2 -a2s $hlds_ip:$hlds_port else sudo -u $use_user $checker_cmd -retry 10 -interval 2 -a2s $hlds_ip:$hlds_port fi } console() { if [ -f $path/$screen_pid ]; then printf "$title Connecting to $server_name\n" printf " For exit from console press Ctrl+A,D\n" printf " Dont press Ctrl+C\n" printf " Please wait...\n" sleep 1 if [ $use_user == root ]; then /usr/bin/screen -wipe /usr/bin/screen -d `cat $path/$screen_pid` /usr/bin/screen -R `cat $path/$screen_pid` else sudo -u $use_user /usr/bin/screen -wipe sudo -u $use_user /usr/bin/screen -d `cat $path/$screen_pid` sudo -u $use_user /usr/bin/screen -R `cat $path/$screen_pid` fi else printf "$title Cannot connect to $server_name, server not running" fi } checker() { checktag="[HLDS-Checker]" checkdown=`$checker_cmd -retry 10 -interval 2 -a2s $hlds_ip:$hlds_port | grep DOWN` checknoresp=`$checker_cmd -retry 10 -interval 2 -a2s $hlds_ip:$hlds_port | grep response` checkup=`$checker_cmd -retry 10 -interval 2 -a2s $hlds_ip:$hlds_port | grep cstrike` hlds_pid_num=`cat $path/$hlds_pid` check_allcore=`sudo taskset -pc "$hlds_pid_num" | grep $allcore` check_usecore=`sudo taskset -pc $hlds_pid_num | grep $usecore` time=`date +%X` date=`date +%D` if [ -n "$checkdown" ]; then printf "$checktag $server_name *[DOWN]*\n" printf "[$time - $date] *[DOWN]* $checkdown\n" >> $path/checker.log stop sleep 1 start sleep 1 echo ----------------ATTENTION---------------- >> $path/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 ----------------------------------------- >> $path/checker.log exit 1 fi if [ -n "$checknoresp" ]; then printf "$checktag $server_name *[NO RESPONSE]*\n" printf "[$time - $date] *[NO RESPONSE]* $checknoresp\n" >> $path/checker.log stop sleep 1 start sleep 1 echo ----------------ATTENTION---------------- >> $path/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 ----------------------------------------- >> $path/checker.log exit 1 fi if [ -n "$checkup" ]; then printf "$checktag $server_name *[OK]*\n" printf "[$time - $date] *[OK]* $checkup\n" >> $path/checker.log fi if [ $usecore == $allcore ]; then if [ $use_user == root ]; then renice -n $priority -p $hlds_pid_num else sudo renice -n $priority -p $hlds_pid_num fi exit 1 else if [ -n "$check_allcore" ]; then printf "$checktag *[BAD PRIORITY]*\n" if [ $use_user == root ]; then taskset -pc $usecore $hlds_pid_num renice -n $priority -p $hlds_pid_num else sudo taskset -pc $usecore $hlds_pid_num sudo renice -n $priority -p $hlds_pid_num fi printf "[$time - $date] *[PRIORITY & AFFINITY RESETED]*\n" >> $path/checker.log exit 1 fi if [ -n "$check_usecore" ]; then printf "$checktag *[GOOD PRIORITY]*\n" exit 1 fi fi } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 2 start ;; status) status ;; console) console ;; checker) checker ;; *) echo "How to use: $0 {start|stop|restart|status|console|checker}" start exit 1 esac вот |
|
|
empy |
26.2.2011, 20:54
Сообщение
|
если файрволом закрыты входящие подключения iptables -P INPUT DROP
то чекер перезагружает сервер если он дажэе и не упал а если открыть все входящие iptables -P INPUT ACCEPT то чекер работает как надо что делать? |
|
|
|
330863 |
26.2.2011, 22:27
Сообщение
|
|
empy,
а ты правилом iptables -P INPUT DROP закрываеш вобше доступ к нему ,к чему такое тугое правило ? =// Hitmaaaaan, странно |
|
|
empy |
26.2.2011, 22:32
Сообщение
|
c iptables разобраться сам не смог
поэтому воспользовался готовым конфигом конф #!/bin/bash ipt=iptables #интерфейсы WAN_IF="ppp0" LO_IF="lo" LOOPBACK="127.0.0.0/8" # входящие порты PORT_WAN_IN_TCP="3306" PORT_WAN_IN_UDP="53,67,68" CS_PORT="27010,27012,27014,27027" modprobe ip_conntrack modprobe ip_conntrack_ftp #дропаем и отчищаем все цепочки $ipt -F $ipt -F INPUT $ipt -F FORWARD $ipt -F OUTPUT $ipt -F -t nat $ipt -F -t mangle $ipt -F -t filter $ipt -t nat -X $ipt -t mangle -X $ipt -t filter -X # задаём правила по умолчанию $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT #проверка трафика на ошибки в протоколах (фильтрация эксплуатируемых уязвимостей) $ipt -N common-check $ipt -F common-check # Отбрасываем невалидные пакты $ipt -A common-check -m state --state INVALID -j DROP # дропает ошибочные пакеты не относящиеся к существующим соединениям $ipt -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset $ipt -A common-check -p tcp ! --syn -m state --state NEW -j DROP #дропаем пакеты помеченые как новый, но без флажка SYN $ipt -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $ipt -A common-check -p tcp --tcp-flags ALL ALL -j DROP $ipt -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP $ipt -A common-check -p tcp --tcp-flags ALL NONE -j DROP $ipt -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $ipt -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # разрешаем трафик образованный от уже существующих и установленных соединений $ipt -N statefull $ipt -F statefull $ipt -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT # разрешаем только определённый тип icmp $ipt -N icmp_packets $ipt -F icmp_packets $ipt -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT $ipt -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT $ipt -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT $ipt -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT # фильтруем брутфорс $ipt -N ssh_brute $ipt -F ssh_brute $ipt -A ssh_brute -m state --state NEW -m recent --set --name SSH -j ACCEPT #В этом правиле мы устанавливаем метку на SSH пакеты $ipt -A ssh_brute -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_BRUTFORCE: " $ipt -A ssh_brute -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j REJECT #защита cs $ipt -N cs_flood $ipt -F cs_flood $ipt -A cs_flood -m length --length 33:1420 -m conntrack --ctstate ESTABLISHED -m hashlimit --hashlimit-upto 101/sec --hashlimit-burst 101 --hashlimit-mode srcip,srcport,dstip,dstport --hashlimit-name CStrike_ACCEPT -j ACCEPT $ipt -A cs_flood -m length --length 51:53 -m conntrack --ctstate NEW -m hashlimit --hashlimit-upto 1/sec --hashlimit-burst 3 --hashlimit-mode srcip,srcport,dstip,dstport --hashlimit-name CStrike_new -j ACCEPT $ipt -A cs_flood -j DROP # цепочка для прочих правил входящего трафика. здесь можно отфильтровать, разрешить и т.п. $ipt -N in-wan $ipt -F in-wan $ipt -A in-wan -p tcp --dport ssh -j ssh_brute $ipt -A in-wan -p udp -m multiport --dport $CS_PORT -j cs_flood $ipt -A in-wan -p tcp -m multiport --sport $PORT_WAN_IN_TCP -j ACCEPT $ipt -A in-wan -p udp -m multiport --sport $PORT_WAN_IN_UDP -j ACCEPT $ipt -A INPUT -p tcp -j common-check #проверяем на ошибки... $ipt -A INPUT -p icmp -j icmp_packets # фильтруем входящие по icmp $ipt -A INPUT -j statefull # разрешаем est и rel трафик $ipt -A INPUT -i $WAN_IF -j in-wan # все входящие, что не отсеяли проверки $ipt -A INPUT -i $LO_IF -d $LOOPBACK -j ACCEPT # трафик "петли" # output здесь не имеет смысла писать, если только не хочется что либо закрыть, потому что по умолчанию на выход всё разрешено. ----------------------------------------- вроде как сделал, тольок не знаю правильно ли, но работает) iptables -I INPUT -s мои_ип -p tcp --dport порт_сервера_который_чекается -j ACCEPT iptables -I INPUT -s мои_ип -p udp --dport порт_сервера_который_чекается -j ACCEPT iptables -I INPUT -s мои_ип -j ACCEPT - ну или так на сколько я понимаю это не вредит другим правилам iptables?
Отредактировал: empy, - 26.2.2011, 23:39
|
|
|
|
330863 |
27.2.2011, 7:22
Сообщение
|
|
empy,
iptables -A INPUT -p udp -m udp --dport 27015 -j ACCEPT |
|
|
empy |
27.2.2011, 10:47
Сообщение
|
|
|
330863 |
27.2.2011, 13:02
Сообщение
|
|
empy,
учи iptables лучше и делай себе конфиг с нуля :) а я выставил в правиле с выше 27015 не просто так ,а как пример ,если сервак на 27015 запушен Hitmaaaaan, проверь по этому путю если у тебя там есть сервак: /home/hitman/hlds/hlds/hlds_pub |
|
|
papapapa |
18.3.2011, 12:50
Сообщение
|
как сделать чтобы при перезагрузке linux запускался этот скрипт в общем ну и серв..так вроде всё работает и почему в скрипте поставил priority="-15" а запускается всё равно с -10......???
|
|
|
|
330863 |
18.3.2011, 12:52
Сообщение
|
|
papapapa,
запуская от рута можно приоритет больше чем -10 тоесть и -15 |
Поблагодарили 1 раз
|
|
papapapa |
18.3.2011, 13:31
Сообщение
|
с приоритетом разобрался, а как сделать то ,чтобы при включение или перезагрузке компа скрипт запускался !?
всё разобрался, в автозапуск команду добавил :)
Отредактировал: papapapa, - 18.3.2011, 13:39
|
|
|
|
нуб |
19.3.2011, 0:11
Сообщение
|
|||
|
Что в скрипте надо поправить, чтобы valve серв запускался?
А то он все в папку cstrike залезть хочет....который нету :)
|
|||
|
||||
330863 |
19.3.2011, 10:10
Сообщение
|
|
нуб,
-game cstrike >> -game valve ,строку иши сам %) |
|
|
нуб |
19.3.2011, 12:37
Сообщение
|
|||
|
330863,
Буэ, лучше папки перекину) там в таком глубоком табе строчки есть... :)
|
|||
|
||||
TEROR^ |
20.3.2011, 20:50
Сообщение
|
накатай скриптэ под centos, а то времени нет править этот ...
|
|
|
|
330863 |
21.3.2011, 8:31
Сообщение
|
|
TEROR^,
с центос не имел дела :) |
|
|
TEROR^ |
23.3.2011, 15:04
Сообщение
|
Ладно, буду юзать другой скрипт =)
|
|
|
|
Bangzilla |
4.4.2011, 19:48
Сообщение
|
Проблема такая... запускается только один сервер с этим скриптом, а нужно ещё 3.
все сервера находятся в разных папках. Скажите что нужно сделать для запуска всех серверов с этим скриптом? |
|
|
|
Serj |
4.4.2011, 20:47
Сообщение
|
|
|
|
|