Fehler im sh Script im init.d Verzeichnis

Limited

New Member
Hallo,
das unten genannte Script enthält einen Fehler, den ich leider nicht finde. Ich erhalte folgende Meldung, wenn ich das Script mittels update-rc.d tsdns defaults in den autostart einfügen möchte:

Code:
update-rc.d: error: insserv rejected the script header

hier das Script:

Code:
#!/bin/sh
# chkconfig: 2345 99 01
# description: Teamspeak 3 TSDNS Server
### BEGIN INIT INFO
# Provides: teamspeak3_tsdns
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Teamspeak 3 TSDNS Server
### END INIT INFO
 
USER="teamspeak3"
DIR="/home/teamspeak3/teamspeak3-server_linux-amd64/tsdns"
 
case "$1" in
start)
su $USER "${DIR}/tsdns_startscript.sh start"
;;
stop)
su $USER "${DIR}/tsdns_startscript.sh stop"
;;
restart)
su $USER "${DIR}/tsdns_startscript.sh restart"
;;
status)
su $USER "${DIR}/tsdns_startscript.sh status"
;;
restart)
su $USER "${DIR}/tsdns_startscript.sh update"
;;
*)
echo "Benutze: `basename $0` {start|stop|restart|status|update}" >&2
exit 1
;;
esac
exit 0

Ich würde mich freuen, wenn Ihr mir helfen könnt. Denn ich kann hier den Fehler leider nicht finden, weshalb ich euch um Rat bitte.

Mit freundlichen Grüßen
Limited
 
Code:
restart)
su $USER "${DIR}/tsdns_startscript.sh restart"
;;
und
Code:
restart)
su $USER "${DIR}/tsdns_startscript.sh update"
;;
kann nicht stimmen.

Zweites muss höchstwahrscheinlich
Code:
update)
su $USER "${DIR}/tsdns_startscript.sh update"
;;
heißen.

Ist das Skript als Ausführbar (chmod +x /etc/init.d/tsdns) markiert?

Probier mal
Code:
# Provides: teamspeak3_tsdns
in
Code:
# Provides: tsdns
abzuändern.
 
Hallo PCFreund,

das erste war ein Fehler, den hätte ich sehen müssen. :eek: - Aber habe ich wohl übersehen...

Die anderen Dinge habe ich befolgt, aber leider komme ich noch immer nicht zum Erfolg. TSDNS wird nicht nach einem Reboot automatisch gestartet.
 
Ja, müsste es eigentlich. Nun habe ich mal
Code:
/etc/init.d/tsdns stop
eingegeben und es erschien folgende Meldung:
Code:
bash: /home/teamspeak3/teamspeak3-server_linux-amd64/tsdns/tsdns_startscript.sh stop: No such file or directory
Das Verzeichnis samt Datei existiert aber. Hier ein Screenshot:
http://img10.myimg.de/tsdns08760.jpg

Hier auch nochmal der Inhalt der tsdns_startscript.sh:
Code:
#!/bin/sh
# For Teamspeak 3 System TSDNS Server

BINARYPATH="$(dirname "${0}")"
cd "${BINARYPATH}"

if [ -e "tsdnsserver_linux_x86" ]; then
	BINARYNAME="tsdnsserver_linux_x86"
elif [ -e "tsdnsserver_linux_amd64" ]; then
	BINARYNAME="tsdnsserver_linux_amd64"
elif [ -e "tsdnsserver_freebsd_x86" ]; then
	BINARYNAME="tsdnsserver_freebsd_x86"
elif [ -e "tsdnsserver_freebsd_amd64" ]; then
	BINARYNAME="tsdnsserver_freebsd_amd64"
else
	echo "Could not locate binary file, aborting"
	exit 5
fi

case "$1" in
	start)
		if [ -e tsdnsserver.pid ]; then
			if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
				echo "The TSDNS server is already running, try restart or stop"
				exit 1
			else
				echo "tsdnsserver.pid found, but no server running. Possibly your previously started server crashed"
				echo "Please view the logfile for details."
				rm tsdnsserver.pid
			fi
		fi
		if [ "${UID}" = "0" ]; then
			echo "WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT"
			c=1
			while [ "$c" -le 10 ]; do
				echo -n "!"
				sleep 1
				c=$((++c))
			done
			echo "!"
		fi
		echo "Starting the TeamSpeak 3 TSDNS server"
		if [ -e "$BINARYNAME" ]; then
			if [ ! -x "$BINARYNAME" ]; then
				echo "${BINARYNAME} is not executable, trying to set it"
				chmod u+x "${BINARYNAME}"
			fi
			if [ -x "$BINARYNAME" ]; then
				echo "TeamSpeak 3 TSDNS server started"
				"./${BINARYNAME}" &
				echo $! > tsdnsserver.pid
			else
				echo "${BINARNAME} is not exectuable, cannot start TeamSpeak 3 TSDNS server"
			fi
		else
			echo "Could not find binary, aborting"
			exit 5
		fi
	;;
	stop)
		if [ -e tsdnsserver.pid ]; then
			echo -n "Stopping the TeamSpeak 3 TSDNS server"
			if ( kill -TERM $(cat tsdnsserver.pid) 2> /dev/null ); then
				c=1
				while [ "$c" -le 300 ]; do
					if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
						echo -n "."
						sleep 1
					else
						break
					fi
					c=$((++c)) 
				done
			fi
			if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
				echo "TSDNS Server is not shutting down cleanly - killing"
				kill -KILL $(cat tsdnsserver.pid)
			else
				echo "done"
			fi
			rm tsdnsserver.pid
		else
			echo "No server running (tsdnsserver.pid is missing)"
			exit 7
		fi
	;;
	restart)
		$0 stop && $0 start || exit 1
	;;
	status)
		if [ -e tsdnsserver.pid ]; then
			if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
				echo "TSDNS Server is running"
			else
				echo "TSDNS Server seems to have died"
			fi
		else
			echo "No TSDNS server running (tsdnsserver.pid is missing)"
		fi
	;;
	update)
		if [ -e tsdnsserver.pid ]; then
			if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
				"./${BINARYNAME}" --update &
			else
				echo "TSDNS Server seems to have died"
			fi
		else
			echo "No TSDNS server running (tsdnsserver.pid is missing)"
		fi
	;;
	*)
		echo "Usage: ${0} {start|stop|restart|status|update}"
		exit 2
esac
exit 0

Falls ich es noch nicht erwähnt habe: Mit dem ganzen möchte ich bezwecken, dass wenn der Server rebootet bzw. gestartet wird, dass der tsdns Server mitstartet. Der Teamspeak Server ansich startet schon mit. Dies habe ich hinbekommen.

Wenn Jemand eine andere Lösung parat hat, würde ich mich über diese freuen.

Danke!
 
Sofern es ein Debian Server ist, kann auch ein simpler Befehl wie
Code:
cd /RICHTIGER/pfad/zu/deinem/tsdns/verzeichnis/ && ./tsdns_startscript.sh start
in /etc/rc.local eingetragen werden.
Das ganze noch in ein su <benutzername> -c 'befehl' verpackt und es ist einigermaßen sicher :)
 
Code:
su teamspeak3 -c /home/teamspeak3/teamspeak3-server_linux-amd64/ && ./ts3server_startscript.sh start
su teamspeak3 -c /home/teamspeak3/teamspeak3-server_linux-amd64/tsdns/ && ./tsdns_startscript.sh start

exit 0

...funktioniert leider nicht. Nutze aber Debian.
 
Ersetze
Code:
su teamspeak3 -c /home/teamspeak3/teamspeak3-server_linux-amd64/ && ./ts3server_startscript.sh start
su teamspeak3 -c /home/teamspeak3/teamspeak3-server_linux-amd64/tsdns/ && ./tsdns_startscript.sh start
mit
Code:
su teamspeak3 -c 'cd /home/teamspeak3/teamspeak3-server_linux-amd64/ && ./ts3server_startscript.sh start'
su teamspeak3 -c 'cd /home/teamspeak3/teamspeak3-server_linux-amd64/tsdns/ && ./tsdns_startscript.sh start'
und führe das dann 'mal per Hand aus:
Code:
bash /etc/rc.local
 
Back
Top