Перейти к содержанию

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


Habilis

Рекомендуемые сообщения

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

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

 

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

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

KasjAnQ.png

 

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

 

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

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

 

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

 

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

 

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

#!/bin/sh
# athena starting script by rowla
# modified by shazeya@syafi.com (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 shazeya@syafi.com"
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
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика