Debian runlevels autostart von diensten

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Debian runlevels autostart von diensten

Beitrag von inception » 26.09.2018 20:40:49

Hallo,

ich wollte einen autostart bzw autostop über die Debian Runlevels einrichten hierfür habe ich eine datei im init.d ordner angelegt welche wie folgt aussieht:

Code: Alles auswählen

#!/bin/bash

### BEGIN INIT INFO
# Provides:		arvlmc
# Required-Start:
# Required-Stop:
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description: Arvlmc start/stop
### END INIT INFO

BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
APPLICATION_NAME="Arvl Minecraft Server"
SCREEN_NAME="arvlmc"
EXECUTION_FILE="java -Xmx4096M -Xms4096M -XX:ParallelGCThreads=4 -jar craftbukkit-1.13.1.jar nogui"
EXECUTING_USER="arvl"
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
case "$1" in
	start)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft bereits!";
			else
				echo -e "Der ${APPLICATION_NAME} wird gestartet..."
				sudo -u ${EXECUTING_USER} screen -AdmS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft bereits!"
			else
				echo -e "Der ${APPLICATION_NAME} wird gestartet..."
				screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			fi
		else
			echo -e "$Du hast keine Berechtigung den ${APPLICATION_NAME} zu starten!"
		fi
	;;
	stop)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird gestoppt! Bitte warte einige Sekunden..."
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say Server wird gestoppt in...^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
			else
				echo -e "$Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird gestoppt! Bitte warte einige Sekunden..."
				screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				screen -S ${SCREEN_NAME} -X stuff "say Server wird gestoppt in...^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				screen -S ${SCREEN_NAME} -X stuff "stop^M"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung den ${APPLICATION_NAME} zu stoppen!"
		fi
	;;
	restart)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden..."
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say Server wird neugestartet in...^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
				sleep 3
				sudo -u ${EXECUTING_USER} screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				sleep 3
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden..."
				screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				screen -S ${SCREEN_NAME} -X stuff "say Server wird neugestartet in...^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				screen -S ${SCREEN_NAME} -X stuff "stop^M"
				sleep 3
				screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				sleep 3
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung den ${APPLICATION_NAME} neu zu starten!"
		fi
	;;
	status)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft!"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft!"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung den Status von dem ${APPLICATION_NAME} zu sehen!"
		fi
	;;
	console)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				sudo -u ${EXECUTING_USER} script -q -c "screen -rxS ${SCREEN_NAME}"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				script -q -c "screen -rxS ${SCREEN_NAME}"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung die Console des ${APPLICATION_NAME}s zu öffnen!"
		fi
	;;
	cmd)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if su -c "screen -list" -s /bin/sh ${EXECUTING_USER} | grep -q ${SCREEN_NAME}; then
				echo -e "Command gesendet."
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "$2^M"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Command sent."
				screen -S ${SCREEN_NAME} -X stuff "$2^M"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung die Console des ${APPLICATION_NAME}s zu öffnen!"
		fi
	;;
	backup)
		cd /home/arvl
		tar cpfz /home/backups/kunden/arvl/mcblkt_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz minecraft
		cd /var/www/html/mcwebinterface/mcmapdl
		rm mostrecent_mcblkt_backup.tar.gz
		cd /home/arvl
		tar cpfz /var/www/html/mcwebinterface/mcmapdl/mostrecent_mcblkt_backup.tar.gz minecraft/world minecraft/world_nether minecraft/world_the_end
		;;
	delbackup)
		cd /home/backups/kunden/arvl
		if [ "$(ls /home/backups/kunden/arvl | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;
	lsbackups)
		echo "Folgende Backups sind verfuegbar "
		ls -t /home/backups/kunden/arvl
		;;
	help)
		case "$2" in
			start)
				echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu starten."
			;;
			stop)
				echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu stoppen."
			;;
			status)
				echo -e "Benutze: \"${0} ${2}\" um zu sehen ob der ${APPLICATION_NAME} online oder offline ist."
			;;
			console)
				echo -e "Benutze: \"${0} ${2}\" um die ${APPLICATION_NAME}-Console zu öffnen."
			;;
			cmd)
				echo -e "Benutze: \"${0} ${2} <Command>\" um einen command in die ${APPLICATION_NAME}-Console zu senden."
			;;
			backup)
				echo -e "Benutze: \"${0} ${2}\" um ein backup für den ${APPLICATION_NAME} zu erstellen."
			;;
			delbackup)
				echo -e "Benutze: \"${0} ${2}\" um alle bis auf die aktuellsten 5 backups des ${APPLICATION_NAME} zu löschen."
			;;
			lsbackups)
				echo -e "Benutze: \"${0} ${2}\" um alle backups des ${APPLICATION_NAME} aufzuliesten."
			;;
			*)
				echo -e "Benutze: \"${0} help <start|stop|status|console|cmd|backup|delbackup|lsbackups>\" für Hilfe"
		esac
	;;
	*)
		echo -e "Benutzung: ${0} {start|stop|restart|status|console|cmd|help|backup|delbackup|lsbackups}"
		exit 1
esac
exit 0
Nun wird aber weder der Dienst gestoppt noch gestartet. Wo ist hier der Fehler? Gestoppt wird er schon aber halt nur weil der Server runterfährt. Normalerweise müsste ich in der Minecraft Console einen Countdown sehen und anschlißend wird der Server runtergefahren.

Mfg,

Daniel

hec_tech
Beiträge: 1093
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Debian runlevels autostart von diensten

Beitrag von hec_tech » 27.09.2018 10:29:14

Ist das ding überhaupt aktiviert worden?

Welche Rechte hat die Datei?

Ich würde heutzutage sowieso das ganze über systemd.

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Debian runlevels autostart von diensten

Beitrag von inception » 27.09.2018 15:02:28

Rechte 755 und ja wurde richtig aktiviert.

Benutzeravatar
jph
Beiträge: 1049
Registriert: 06.12.2015 15:06:07
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Greven/Westf.

Re: Debian runlevels autostart von diensten

Beitrag von jph » 27.09.2018 22:49:14

inception hat geschrieben: ↑ zum Beitrag ↑
26.09.2018 20:40:49
ich wollte einen autostart bzw autostop über die Debian Runlevels einrichten hier
Setzt du kein systemd ein oder weshalb nutzt du die Runlevels?

Bei Nutzung von systemd könntest du den Dienst über eine Unit starten, die auf das gewünschte Target verweist.

Nachtrag: falls du tatsächlich mit sysvinit herumhantieren solltest: hast du an update-rc.d gedacht?

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Debian runlevels autostart von diensten

Beitrag von inception » 28.09.2018 01:09:39

Natürlich habe ich dran gedacht. Trotzdem geht es nicht. Ich schaue mir mal Systemd an

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Debian runlevels autostart von diensten

Beitrag von inception » 28.09.2018 01:16:13

Wie kann ich einstellen das der mc server beim shutdown runtergefahren wird? So wie ich das verstehe kann man mit systemd nur programme starten lassen.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Debian runlevels autostart von diensten

Beitrag von MSfree » 28.09.2018 08:28:30

inception hat geschrieben: ↑ zum Beitrag ↑
28.09.2018 01:16:13
So wie ich das verstehe kann man mit systemd nur programme starten lassen.
Dann hast du etwas gründlich falsch verstanden.

inception
Beiträge: 36
Registriert: 16.04.2017 18:12:12

Re: Debian runlevels autostart von diensten

Beitrag von inception » 29.09.2018 05:25:03

Dann schau ich mal was ich da hinbekomme :D

Antworten