Prozess aus eigenem Init script wird gekillt

Dieses Thema im Forum "RedHat,Fedora & CentOS" wurde erstellt von Gast123, 07.06.2011.

  1. #1 Gast123, 07.06.2011
    Gast123

    Gast123 Guest

    Hallo Leute,

    mein nächstes Problem nach meinem Umsieg auf Fedora 15 macht sich bemerkbar.
    Ich habe zwei eigene Init scripts vom vorherigen System übernommen (Fedora 14 lief ja noch mit dem alten Init-System):
    1) Start script für meinen TS3 Server:
    Code:
    /etc/init.d/ts3d
    Code:
    #!/bin/bash
    #
    # ts3server    Startup script for the TeamSpeak 3 Server
    #
    # chkconfig: - 95 15
    # description: The TeamSpeak 3 Server is an efficient and extensible  \
    #	       server for voip communications.
    
    TS_USER=teamspeak
    TS_HOME=/home/teamspeak
    
    cd $TS_HOME
    
    if [ $EUID -eq 0 ]; then
    	su $TS_USER -c "./ts3server_startscript.sh $@" -s /bin/bash
    	exit $?
    else
    	echo 1>&2 "Insufficient permissions!"
    fi
    1) Start script für meinen Minecraft Server:
    Code:
    /etc/init.d/mined
    Code:
    #! /bin/bash
    # chkconfig: - 99 01
    # description: Minecraft server
    
    #
    # User definition
    #
    MC_USER=minecraft
    
    #
    # Absolute Paths
    #
    MC_HOME=/home/$MC_USER
    MC_BACKUP=$MC_HOME/backup
    MC_SERVERS=$MC_HOME/servers
    ALL_SERVERS="`ls $MC_SERVERS | grep -v ".pid"`"
    
    #
    # Realative Paths
    #
    JAVA="java"
    MC_EXEC="-jar minecraft_server.jar nogui"
    MC_CONFIG=server.properties
    
    #
    # Private functions
    #
    chkcfg() {
    	SERVERS=$@
    	PORTS=
    	XMS=0
    	XMX=0
    	for SERVER in $SERVERS; do
    		cd $MC_SERVERS/$SERVER
    
    		TMP_PORT=`grep server-port $MC_CONFIG | cut -d "=" -f 2`
    		PORTS="$PORTS $TMP_PORT"
    		
    		TMP_XMS=`grep "xms=" $MC_CONFIG | cut -d "=" -f 2`
    		XMS=$(($XMS+$TMP_XMS))
    		TMP_XMX=`grep "xmx=" $MC_CONFIG | cut -d "=" -f 2`
    		XMX=$(($XMX+$TMP_XMX))
    	done
    
    	echo -en "Checking configuration of servers\t"
    
    	for PORT1 in $PORTS; do
    		MATCH=0
    		for PORT2 in $PORTS; do
    			if [ "$PORT1" == "$PORT2" ]; then
    				MATCH=$(($MATCH + 1))
    			fi
    		done
    		if [ $MATCH -gt 1 ]; then
    			echo "[ ERROR ]"
    			echo -e "\t-> Some servers are using the same port. Fix this!"
    			exit $(($MATCH -1))
    		fi
    	done
    	
    	MEM_AVAIL=$(($(free -m | grep Mem | cut -c 37-40)+$(free -m | grep Swap | cut -c 37-40)))
    	if [ $XMS -gt $MEM_AVAIL ]; then
    		echo "[ ERROR ]"
    		echo -e "\t-> Servers require more minimum RAM in total than I have free!"
    		echo -e "\t   ($XMS / $MEM_AVAIL)"
    		exit 2
    	fi
    
    	MEM_TOTAL=$(($(free -m | grep Mem | cut -c 15-18)+$(free -m | grep Swap | cut -c 15-18)))
    	if [ $XMX -gt $MEM_TOTAL ]; then
    		echo "[ ERROR ]"
    		echo -e "\t-> Servers require more maximum RAM in total than I can provide!"
    		echo -e "\t   ($XMX / $MEM_TOTAL)"
    		exit 2
    	fi
    	
    	echo "[ OK ]"
    
    	echo -e "\tXms total: $XMS\n\tXmx total: $XMX\n\tPorts: $PORTS"
    	return 0
    }
    
    status_server() {
    	if [ $# -ge 1 ]; then
    		SERVER=$1
    		QUIET=
    		if [ "$2" == "quiet" ]; then
    			QUIET=yes
    		fi
    		
    		test $QUIET || echo -en "Status of Minecraft Server \"$SERVER\":\t"
    	
    		if [ -d $MC_SERVERS/$SERVER ]; then
    			cd $MC_SERVERS/$SERVER
    		else
    			test $QUIET || echo "[ FAILED ]"
    			test $QUIET || echo -e "\t\t -> no such server!"
    			return 3
    		fi
    
    		if [ -f $MC_SERVERS/$SERVER.pid ]; then
    			PID=`cat $MC_SERVERS/$SERVER.pid`
    			PORT=`grep server-port $MC_CONFIG | cut -d "=" -f 2`
    			PS=$(($(ps -p $PID | wc -l) - 1))
    
    			if [ $PS -eq 1 ]; then
    				test $QUIET || echo "[ RUNNING ]"
    				test $QUIET || echo -e "\t PID: $PID \tPort: $PORT"
    				return 0
    			else
    				test $QUIET || echo "[ DIED ]"
    				rm $MC_SERVERS/$SERVER.pid
    				return 2
    			fi
    		else
    			test $QUIET || echo "[ DOWN ]"
    			return 1
    		fi
    	else
    		echo "Usage: status_server(SERVER{,quiet})"
    		return 4
    	fi
    }
    
    start_server() {
    	if [ $# -eq 1 ]; then
    		SERVER=$1
    
    		echo -en "Starting Minecraft Server \"$SERVER\"\t"
    
    		if ( ! status_server $SERVER quiet ); then
    			if [ -d $MC_SERVERS/$SERVER ]; then
    				cd $MC_SERVERS/$SERVER
    			else
    				echo "[ FAILED ]"
    				echo -e "\t\t -> no such server!"
    				return 1
    			fi
    			
    			XMS=`grep xms= $MC_CONFIG | cut -d "=" -f 2`
    			XMX=`grep xmx= $MC_CONFIG | cut -d "=" -f 2`	
    			if [ -z "$XMS" -o -z "$XMX" ]; then
    				echo "[ FAILED ]"
    				echo -e "\t-> No Xms or Xmx set!"
    				exit 2
    			fi
    			$JAVA -Xms"$XMS"M -Xmx"$XMX"M $MC_EXEC >> server.log 2>> server-err.log & echo $! > $MC_SERVERS/$SERVER.pid
    			sleep 2
    
    			if ( status_server $SERVER quiet ); then
    				echo "[ DONE ]"
    				return 0
    			else
    				echo "[ FAILED ]"
    				return 1
    			fi
    		else
    			echo "[ DONE ]"
    			echo -e "\t\t-> already running!"
    			return 0
    		fi
    	else
    		echo "Usage: start_server(SERVER)"
    		return 1
    	fi
    }
    
    stop_server() {
    	if [ $# -eq 1 ]; then
    		SERVER=$1
    
    		echo -en "Stopping Minecraft Server \"$SERVER\"\t"
    
    		if ( status_server $SERVER quiet ); then
    			if [ -d $MC_SERVERS/$SERVER ]; then
    				cd $MC_SERVERS/$SERVER
    			else
    				echo "[ FAILED ]"
    				echo -e "\t\t -> no such server!"
    				return 1
    			fi
    			kill `cat $MC_SERVERS/$SERVER.pid 2> /dev/null` 2> /dev/null
    			sleep 1
    
    			while ( status_server $SERVER quiet ); do
    				sleep 1
    			done
    
    			if ( ! status_server $SERVER quiet ); then
    				rm $MC_SERVERS/$SERVER.pid 2> /dev/null
    				echo "[ DONE ]"
    				return 0
    			fi
    		else
    			echo "[ DONE ]"
    			echo -e "\t\t-> not running!"
    			return 0
    		fi	
    	else
    		echo "Usage: stop_server(SERVER)"
    		return 1
    	fi	
    }
    
    backup_server() {
    	if [ $# -eq 1 -o $# -eq 2 ]; then
    		SERVER=$1
    		
    		echo -en "Attempting to create backup of \"$SERVER\"\t"
    
    		if [ -d $MC_SERVERS/$SERVER ]; then
    			cd $MC_SERVERS/$SERVER
    		else
    			echo "[ FAILED ]"
    			echo -e "\t\t -> no such server!"
    			return 1
    		fi
    
    		cd $MC_SERVERS
    
    		if [ ! -d $MC_BACKUP ]; then
    			mkdir $MC_BACKUP
    		fi
    	
    		TIME_STAMP=`date +%d.%m.%Y-%H.%M`
    		BACKUP_FILE="$MC_BACKUP/minecraftbackup#$SERVER#$TIME_STAMP.tar.gz"
    
    		tar -czf "$BACKUP_FILE" $SERVER > /dev/null 2> /dev/null
    		
    		if [ $? -eq 0 ]; then
    			echo "[ DONE ]"
    			return 0
    		else
    			echo "[ FAILED ]"
    			rm $BACKUP_FILE 2> /dev/null
    			return 1
    		fi
    	else
    		echo "Usage: backup_server(SERVER{,TAG})"
    		return 1
    	fi	
    }
    
    #
    # Public functions
    #
    start() {
    	SERVERS="$@"
    	if [ -z "$SERVERS" ]; then
    		SERVERS=$ALL_SERVERS
    	fi
    
    	chkcfg $SERVERS
    
    	RETVAL=0
    	for SERVER in $SERVERS; do	
    		start_server $SERVER
    		RETVAL=$(($RETVAL + $?))
    	done
    
    	return $RETVAL
    }
    
    stop() {
    	SERVERS="$@"
    	if [ -z "$SERVERS" ]; then
    		SERVERS=$ALL_SERVERS
    	fi
    
    	RETVAL=0
    	for SERVER in $SERVERS; do	
    		stop_server $SERVER
    		RETVAL=$(($RETVAL + $?))
    	done
    
    	return $RETVAL
    }
    
    status() {
    	SERVERS="$@"
    	if [ -z "$SERVERS" ]; then
    		SERVERS=$ALL_SERVERS
    	fi
    
    	RETVAL=0
    	for SERVER in $SERVERS; do	
    		status_server $SERVER
    		RETVAL=$(($RETVAL + $?))
    	done
    
    	return $RETVAL
    }
    
    restart() {
    	stop $@
    	start $@
    }
    
    backup() {
    	SERVERS="$@"
    	if [ -z "$SERVERS" ]; then
    		SERVERS=$ALL_SERVERS
    	fi
    
    	RETVAL=0
    	for SERVER in $SERVERS; do
    		SERVER_STATUS=`status_server $SERVER quiet; echo $?`
    		if [ $SERVER_STATUS -eq 0 ]; then
    			stop_server $SERVER
    		fi
    		
    		backup_server $SERVER
    
    		if [ $SERVER_STATUS -eq 0 ]; then
    			start_server $SERVER
    		fi
    	done
    
    	return $RETVAL
    }
    
    restore() {
    	echo -en "Attempting to restore backup...\t\t"
    
    	PATTERN=$1
    	CNT=`ls -l $MC_BACKUP | grep "$PATTERN" | wc -l`
    
    	if [ $CNT -eq 1 ]; then
    		BACKUP=`ls $MC_BACKUP | grep "$PATTERN"`
    		SERVER=`echo $BACKUP | cut -d "#" -f 2`
    
    		if [ ! -d $MC_SERVERS/$SERVER ]; then
    			echo "[ ERROR ]"
    			echo -e "\t-> No such server \"$SERVER\"!"
    			return 1
    		fi
    	
    		SERVER_STATE=`status_server $SERVER quiet 2> /dev/null; echo $?`
    		cd $MC_SERVERS
    		
    		if [ $SERVER_STATE -eq 0 ]; then
    			stop_server $SERVER
    		fi
    
    		rm -R $SERVER
    		tar -xzf $MC_BACKUP/$BACKUP > /dev/null 2> /dev/null
    		RETVAL=$?
    
    		if [ $SERVER_STATE -eq 0 ]; then
    			start_server $SERVER
    		fi
    		
    		if [ $RETVAL -eq 0 ]; then
    			echo "[ DONE ]"
    			return 0
    		else
    			echo "[ FAILED ]"
    			return 1
    		fi
    	else
    		echo "[ FAILED ]"
    		echo -e "\t\t-> ambiguous selection"
    		echo -e "\t\t   ($BACKUP)"
    		return 2	
    	fi
    }
    
    #
    # Script begin
    #
    if [ "$USER" != "$MC_USER" -a "$1" != "status" ]; then
    	su $MC_USER -c "$0 $*" -s /bin/bash
    	exit $?
    fi
    
    cd $MC_HOME
    
    CMD=$1
    shift 
    
    case $CMD in
    	start)		start $@
    	;;
    	stop)		stop $@
    	;;
    	restart)	restart $@
    	;;
    	status)		status $@
    	;;
    	backup)		backup $@
    	;;
    	restore)	restore $@
    	;;
    	*)		echo "Usage: `basename $0` {start,stop,status,restart,backup,restore}"
    esac
    
    exit $?
    
    Diese habe ich via
    Code:
    sudo chkconfig {ts3d,mined} on
    aktiviert.
    Offensichtlich werden die scripte auch beim booten gestartet, die Prozesse dann aber wieder gekillt, da beide Scripte einen entsprechenden Rückgabewert liefern.
    Hat jemand eine Idee, woran das liegen kann und welche logfiles hilfreich wären?

    Danke euch und LG

    Schard
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Remidemi, 08.06.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hi

    In welchen Runlevel hast du die Scripts verlinkt? (chkconfig --list)

    In welchen Runlevel startest du per Default?

    MFG
     
  4. #3 Gast123, 08.06.2011
    Gast123

    Gast123 Guest

    Hi,

    Code:
    mined           0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus
    ts3d            0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus
    Stanndard Runlevel ist multiuser (ohne GUI) (ehem. 3):
    Code:
    [schard@hpsrv system]$ ls -alF /etc/systemd/system/default.target
    lrwxrwxrwx. 1 root root 37  6. Jun 12:36 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
    
     
  5. #4 Remidemi, 08.06.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hmm...

    Eigentlich sollte das neue Upstart zu SysV kompatibel sein.

    Fällt mir jetzt gerade nichts dazu ein was erklären könnte warum dein Script startet und gleich wieder gekillt wird.
     
  6. #5 Gast123, 09.06.2011
    Gast123

    Gast123 Guest

    Ja, die SysVInit Kompatiblilität scheint ihre Grenzen zu haben.
    Habe nun systemd Skripte für die services geschrieben, die auch nun funktionieren:
    Code:
    [Unit]
    Description=TeamSpeak 3 Server
    After=NetworkManager.service
    
    [Service]
    Type=simple
    User=teamspeak
    ExecStart=/home/teamspeak/ts3server_minimal_runscript.sh
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
    Code:
    [Unit]
    Description=Minecraft Server
    After=NetworkManager.service
    
    [Service]
    Type=simple
    User=minecraft
    RemainAfterExit=yes
    ExecStart=/home/minecraft/minecraft start
    ExecStop=/home/minecraft/minecraft stop
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
     
Thema:

Prozess aus eigenem Init script wird gekillt

Die Seite wird geladen...

Prozess aus eigenem Init script wird gekillt - Ähnliche Themen

  1. GPL-Prozess gegen VMware hat begonnen

    GPL-Prozess gegen VMware hat begonnen: Der von Christoph Hellwig angestrengte Prozess gegen VMware wegen vermuteter GPL-Verletzung begann vor dem Landgericht Hamburg mit einer Anhörung....
  2. Wine überarbeitet Entwicklungsprozess

    Wine überarbeitet Entwicklungsprozess: Alexandre Julliard, langjähriger Maintainer des Wine-Projektes, hat Änderungen bei der Freigabe der künftigen Varianten des Windows-API-Nachbaus...
  3. Qualcomm publiziert Registerdokumentation für Adreno-Grafikprozessoren

    Qualcomm publiziert Registerdokumentation für Adreno-Grafikprozessoren: Als erster Hersteller von Chips für eingebettete Systeme hat Qualcomm überraschend eine Dokumentation für Teile seiner Adreno-Grafikprozessoren...
  4. Neue Intel-Grafikprozessoren nutzen proprietäre Firmware-Dateien

    Neue Intel-Grafikprozessoren nutzen proprietäre Firmware-Dateien: Ein neulich getätigter Beitrag zum Linux-Kernel zeigt, dass einige der neueren i915-Grafikprozessoren nun erstmals auf Firmware angewiesen sind,...
  5. Raspberry Pi 2 versechsfacht Prozessorleistung

    Raspberry Pi 2 versechsfacht Prozessorleistung: Die Raspberry Pi Foundation hat den Nachfolger des erfolgreichen Kleinrechners Raspberry Pi vorgestellt. Raspberry Pi 2 kommt mit einem Prozessor...