Habilis

Хабиля допилил старт Герка

1 сообщение в этой теме

Даров пачаны,

Хабиля допилил стартовый скрипт под Линукс на Герке

 

Скрипт теперь проверяет статус серверов по .пид файлу

и может выполнять активное логгирование

KasjAnQ.png

 

Хабиля кароч школьник и не силен в Кодинге, если кто круче кодит исправьде ошибки (если найдете)

 

можете сравнить с оригиналом

https://github.com/HerculesWS/Hercules/blob/master/athena-start

 

вот в этом Вэб сервисе https://www.diffchecker.com/

 

и посматреть чего Хабиля наменял в скрипте.

 

вот сам скрипт

#!/bin/sh
# athena starting script by rowla
# modified by [email protected] (NL101541)
# even more modified by Habilis

###################################################################################
# Note from Habilis
###################################################################################
# Added new options and optional arguments
# athena-start { start | stop | restart | status }
# Can now check status of your servers (Running/ not running)
# It also performs check if server is already running,
# before starting server.
# This code can perform logging of your servers
# if you use -l
# The logs will be [yyyy-mm-dd_H-M-S]_[SERVER NAME].log
# under the log/ folder of your emulator.
# The date and time in the log file name is the date and time of the server start.
###################################################################################
 
PROGRAM=$0
ARG=$1

ISFORCE=0
ISLOG=0
 
PATH=./:$PATH
# Where logs per server will be stored
LOG_DIR="./log"
 
L_SRV=login-server
C_SRV=char-server
M_SRV=map-server
 
print_start() {
#    more << EOF
echo "Athena Starting..."
echo "            (c) 2003 Athena Project"
echo "              modified by [email protected]"
echo ""
#echo "Debug informations will appear,"
#echo "since this is a test release."
#echo ""
echo "checking..."
#EOF
}

# Will return the server running status, based on the .pid file.
# As accurate, as .pid file check could be...
get_status(){
    PIDFILE=.$1.pid
    if [ -e ${PIDFILE} ]; then
        ISRUN=$(ps ax | grep $(cat ${PIDFILE}) | grep $1)
        PSRUN=$(echo "$ISRUN" | awk '{ print $1 }')
    fi
}

# This will start servers With or without logging
# Map, Char, Login server log files will appear under /log folder
# ex :  2018-02-02_16-05-09_map-server.log
# Date and time, when server started
start_serv(){
    if [ $2 -eq 1 ]; then
        LOGRUN="$LOG_DIR/`date +"%Y-%m-%d_%H-%M-%S"`_$1.log"
        FIFO="$1_fifo"
 
        if [ -e ./${FIFO} ]; then rm "$FIFO"; fi
        mkfifo "$FIFO"; tee "$LOGRUN" < "$FIFO" & "./$1" > "$FIFO" 2>&1 & PID=$!
        echo "$PID" > .$1.pid
 
    else
        ./$1&
        echo "$!" > .$1.pid
    fi
}
 
check_files() {
 
	for i in ${L_SRV} ${C_SRV} ${M_SRV}
	do
		if [ ! -f ./$i ]; then
			echo "$i does not exist, or can't run."
			echo "Stop. Check your compile."
			exit 1;
		fi
	done

	#    more << EOF
	echo "Check complete."
	echo "Looks good, a nice Athena!"
	#EOF
}

# Additional params check for logging or a force start/restart
while :; do
    case $2 in
        -l|--log) ISLOG=1            
        ;;
        -f|--force) ISFORCE=1          
        ;;
        *) break
    esac
    shift
done
 
 
case $ARG in
    'start')
        print_start
        check_files
       
        if [ $ISLOG -eq 1 ]; then
         if [ ! -d "$LOG_DIR" ]; then mkdir -p $LOG_DIR; fi
         echo "Logging is enabled in $LOG_DIR"
        fi 
        echo "Now Started Athena."
       
        for i in ${L_SRV} ${C_SRV} ${M_SRV}
        do
            if [ $ISFORCE -eq 1 ]; then
                start_serv $i $ISLOG
            else
                get_status $i
   
                if [ -z ${PSRUN} ]; then
                    start_serv $i $ISLOG
                else
                    echo "Cannot start '${i}', because it is already running p${PSRUN}"
                fi
            fi
        done
       
;;
    'status')
    for i in ${L_SRV} ${C_SRV} ${M_SRV}
    do
        get_status ${i}
        if [ ${PSRUN} ]; then echo "'${i}' is running p${PSRUN}"; else echo "'${i}' seems to be down"; fi
    done   
;;
    'stop')
    for i in ${L_SRV} ${C_SRV} ${M_SRV}
    do
        PIDFILE=.${i}.pid
        if [ -e ./${PIDFILE} ]; then
            kill $(cat ${PIDFILE})
            if [ $ISFORCE -eq 0 ]; then
                while true; do
                    get_status ${i}
                    if [ ${PSRUN} ]; then echo "'${i}' is running p${PSRUN} waiting for the process to end"; sleep 2;
                    else
                        break
                    fi
                done
            fi
           
            rm ${PIDFILE}
        fi
    done
;;
    'restart')
        if [ $ISFORCE -eq 1 ]; then FORCE="-f"; else FORCE=""; fi
        if [ $ISLOG -eq 1 ]; then LOGGING="-l"; else LOGGING=""; fi
        $PROGRAM stop "$LOGGING" "$FORCE"
        $PROGRAM start "$LOGGING" "$FORCE"
;;
    *)
        echo "Usage: athena-start { start | stop | restart | status }"
        echo "You can force { start | stop | restart } by adding -f"
        echo "To enable logging: './athena-start[start | restart] -l'"
        echo "-l will write all terminal output into a file"
        echo "log/[yyyy-mm-dd_H-M-S]_[SERVER NAME].log"
;;
esac

 

 

 

 

Подробнее у хабили в блоге (англ)

https://habilisbest.com/hercules-start-script-improvement

 

 

Записка от Хабили : ВНИМАНИЕ, это кустарная модификация, Саппорт и Девелоперы Герка могут быть не в силах вам помочь, если что.

 

 

 

 

 

 

 

Изменено пользователем Habilis
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас