Pagina 1 van 1

automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 17:55
door Silver_Rain
Hey,


Hopelijk kunnen de experts me een beetje helpen met dit linux probleempje.
Ik heb op mijn nas (synology ds1511+) teamspeak gezet.
Enige nadeel is als ik de nas een keer restart ,ik telkens weer moet inloggen met putty en handmatig teamspeak opzetten.

Ik had dit graag automatisch laten gebeuren.
Ik heb daarvoor al een script aangemaakt in volgende directory:

/usr/local/etc/rc.d/ daar staan ook andere opstartscripts die overigens wel werken.
het script heb ik als inhoud het volgende gegeven:

case "$1" in
start)
sh /root/ts3/ts3server_startscript.sh start
;;
stop)
sh /root/ts3/ts3server_startscript.sh stop
;;
*)
echo "Usage: $0 [start|stop]"
;;
esac


Nu werkt het om een of andere reden toch niet zoals het zou moeten, om niet te zeggen niet :lol:
Hopelijk kan iemand me hiermee helpen.


Alvast bedankt :wink:

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 17:57
door qless
Heb je het script uitvoerbaar gemaakt? Dat kan met chmod +x scriptnaam

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 18:15
door Silver_Rain
Ja dat had ik ook gedaan.

Als ik gewoon sh /root/ts3/ts3server_startscript.sh start ingeef krijg ik volgende melding:

BusyBox v1.16.1 (2011-06-29 11:52:19 CST) multi-call binary.
Usage: readlink FILE
Display the value of a symlink
Could not locate binary file, aborting

als ik in de folder ben waar zich het ts3server_startscript.sh script bevind en daar ts3server_startscript.sh start doe gaat het perfect en start de server.

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 18:35
door ubremoved_15739

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 19:31
door Silver_Rain
Hier heb ik toch even wat meer info over nodig, wat moet ik doen in mijn geval?

heb even een echo $PATH gedaan:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/syno/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 19:46
door ubremoved_15739
Vooreerst: mijn inziens is het geen goed idee om TeamSpeak in de directory van de root user te plaatsen ....
Nu staat dit blijkbaar geïnstalleerd in "/root/ts3". Dus voortgaande hierop zou "/root/ts3" aan het path toegevoegd dienen te worden in het script dat je geplaatst hebt in de directory "/etc/init.d".

Onderstaand vind je een voorbeeld van een init script (zij het wel voor vnstat).
De regel "PATH=/usr/sbin:/usr/bin:/sbin:/bin" zou in jouw geval dus worden: "PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/ts3".
Maar uiteraard aan te passen aan wat voor TeamSpeak daadwerkelijk nodig is.

PS In de tutorial op de website van TeamSpeak vind je meer over hoe TeamSpeak niet als root user te draaien: Tutorial: Setting up the TeamSpeak 2 server on Linux. Dat is wel voor versie twee, maar het principe is hetzelfde voor versie 3 uiteraard. In dit geval zou "/home/teamspeak/tss2_rc2" aan het path dienen toegevoegd te worden.

Code: Selecteer alles

#! /bin/sh
### BEGIN INIT INFO
# Provides:          vnstat
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: lightweight network traffic monitor
### END INIT INFO

PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="vnStat daemon"
NAME=vnstatd
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="-d"
PIDFILE=/var/run/vnstat.pid
SCRIPTNAME=/etc/init.d/vnstat

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

#
# Function that starts the daemon/service
#
do_start()
{
	# Return
	#   0 if daemon has been started
	#   1 if daemon was already running
	#   2 if daemon could not be started
	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
		|| return 1
	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
		$DAEMON_ARGS \
		|| return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
	# Return
	#   0 if daemon has been stopped
	#   1 if daemon was already stopped
	#   2 if daemon could not be stopped
	#   other if a failure occurred
	start-stop-daemon --stop --quiet --retry=TERM/15/KILL/5 --pidfile $PIDFILE --name $NAME
	RETVAL="$?"
	[ "$RETVAL" = 2 ] && return 2

	rm -f $PIDFILE
	return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
	start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
	return 0
}

do_status()
{
	# Return
	#   0 if daemon is stopped
	#   1 if daemon is running
	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
		|| return 1
}

case "$1" in
  start)
	echo -n "Starting $DESC: $NAME"
	do_start
	case "$?" in
		0) echo "." ;;
		1) echo " already running." ;;
		2) echo " start failed." ; exit 1 ;;
	esac
	;;
  stop)
	echo -n "Stopping $DESC: $NAME"
	do_stop
	case "$?" in
		0) echo "." ;;
		1) echo " already stopped." ;;
		2) echo " stop failed." ; exit 1 ;;
	esac
	;;
  status)
	echo -n "Checking $DESC: "
	do_status
	case "$?" in
		0) echo "stopped." ; exit 3 ;;
		1) echo "running." ;;
	esac
	;;
  reload|force-reload)
	echo -n "Reloading $DESC configuration..."
	do_reload
	echo "done."
	;;
  restart)
	echo -n "Restarting $DESC: $NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) echo "." ;;
			1) echo " old process is still running." ;;
			*) echo " start failed." ; exit 1 ;;
		esac
		;;
	  *)
		echo " stop failed."
		exit 1
		;;
	esac
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
	exit 1
	;;
esac

exit 0

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 20:06
door Silver_Rain
dus mijn script zal dan zo worden?


PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/ts3

case "$1" in
start)
sh /root/ts3/ts3server_startscript.sh start
;;
stop)
sh /root/ts3/ts3server_startscript.sh stop
;;
*)
echo "Usage: $0 [start|stop]"
;;
esac


Denkt toch dat ik nog iets moet doen, want op deze manier werkt het nog niet.

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 21:23
door ubremoved_15739
Vooreerst: installeer en draai TeamSpeak zoals het hoort.
Dit wil zeggen: minstens onder een specifieke gebruiker (teamspeak) en in diens directory.
Hoe je dit moet doen staat in een voorgaand bericht van mij.

Voor je init script zijn er diverse mogelijkheden. Van uitgebreid tot summier.

Je kan je script hetzelfde laten doen zoals jijzelf doet: naar de betreffende directory gaan en dan het programma uitvoeren.
Een voorbeeld:

Code: Selecteer alles

#!/bin/bash

#Zeit Abwarten um IP-adresse zu bekommen (für DHCP):
# sleep 20  ## Deze heb ik eruit gehaald omdat jij dit allicht niet nodig hebt.

# User which will run the Teamspeak-Server
USER=teamspeak

# The installation directory of the Teamspeak-Server
DIR=/home/teamspeak/ts3server

# Run the start script
su -c "cd $DIR && $DIR/ts3server_startscript.sh $1" - $USER
Bron: TeamSpeak-Server
Let ook op dat je mogelijks enkele softlinks dient aan te maken zoals op bovenstaande webpagina beschreven.


Het kan ook allemaal wat "netter" en dan zou men het volgende als basis kunnen nemen (maar allicht momenteel niet haalbaar voor jou):

Code: Selecteer alles

#! /bin/bash
# Copyright (c) 2004 TeamSpeak team   All rights reserved.
#
# Author: pwk.linuxfan 2004
# Modified by Derek "Cybernaut" Jackson - www.DigitalNines.com
#
# chkconfig: 345 85 15
# description: Runs and kills TeamSpeak Voice server at boot time and shutdown.            
# Source function library.
#. /etc/rc.d/init.d/functions

# START OF CONFIG SECTION
# WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
USER=voice
DIR=/home/voice/tss2_rc2
# END OF CONFIG SECTION

# See how we were called.
case "$1" in
        start)
                if [ -e $DIR/tsserver2.pid ]; then
                        echo "tsserver2.pid already exists...server already started ?";
                        echo "If you are sure the server is not running, delete tsserver2.pid"
                        exit 1
                else
                        if [ "$UID" = "0" ]; then
                                for c in $(seq 1 10); do
                                        echo -n "!"
                                        sleep 1
                                done
                                echo !
                        fi
                        echo "Starting the TeamSpeak Voice server..."
                        if [ -e $DIR/server_linux ]; then
                                if [ ! -x $DIR/server_linux ]; then
                                        echo "server_linux is not executable; trying to set it."
                                        chmod u+x $DIR/server_linux
                                fi
                                if [ -x $DIR/server_linux ]; then
                                        WD=`pwd`
                                        cd $DIR
                                        su $USER -c "$DIR/server_linux -PID=tsserver2.pid" &
                                        cd $WD
                                else
                                        echo "server_linux is not executable; fix this."
                                        exit 4
                                fi
                        else
                                echo "Couldnt find server_linux."
                                exit 5
                        fi
                fi
        ;;
    stop)
                if [ -e $DIR/tsserver2.pid ]; then
                        echo -n "Stopping the TeamSpeak Voice server..."
                        if ( kill -TERM `cat $DIR/tsserver2.pid` ); then
                                for c in $(seq 1 300); do
                                        if [ -e $DIR/tsserver2.pid ]; then
                                                echo -n "."
                                                sleep 1
                                        fi
                                done
                        fi
                        if [ -e $DIR/tsserver2.pid ]; then
                                echo "server does not shutdown cleanly - killing"
                                kill -KILL `cat $DIR/tsserver2.pid`
                                rm $DIR/tsserver2.pid
                                sleep 5
                        else
                                echo "done"
                        fi
                else
                        echo "tsserver2.pid is missing; is the server stopped already?"
                        #exit 7 - Should not be here as doesn't allow restart if server is already stopped.
                fi
        ;;
        restart)
                $0 stop && $0 start || exit 1
        ;;
        status)
                if [ -e $DIR/tsserver2.pid ]; then
                        echo "The TeamSpeak Voice server is running."
                        exit 0
                else
                        echo "The TeamSpeak Voice server is stopped."
                        exit 3
                fi
        ;;
        passwords)
                if [ -e $DIR/server.log ]; then
                        date=$(cat $DIR/server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^\([0-9]\+-[0-9]\+-[0-9]\+ [0-9]\+:[0-9]\+:[0-9]\+\).*$/\1/")
                        spass=$(cat $DIR/server.log | grep "superadmin account info: username: superadmin" | tail -n 1 | sed "s/^.*username: superadmin password: \([a-z0-9]\+\).*$/\1/")
                        pass=$(cat $DIR/server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^.*username: admin password: \([a-z0-9]\+\).*$/\1/")
                        echo "Following passwords were generated on $date"
                        echo "superadmin = \"$spass\""
                        echo "admin      = \"$pass\""
                else
                        echo "server.log not found; maybe the server has not been started yet?" 
                        exit 1
                fi
        ;;
        *)
                echo "Usage: $0 {start|stop|restart|status|passwords}"
                exit 2
esac
exit 0
Bron: Start stop script for TeamSpeak daemon (init)

PS Verwacht geen "copy and paste" script van mij (hoewel het eerste dat eigenlijk wel is mits correcte installatie). Ik ben van mening dat een root gebruiker moet weten wat hij doet en welke risico's hij (of zij) loopt, zeker indien men publiek toegankelijke programma's gaat draaien op een NAS met persoonlijke gegevens van jou én jouw naasten. Bovendien is er nog niemand doodgegaan van zelf na te denken. :wink:

Re: automatisch programma laten starten linux

Geplaatst: 21 sep 2011, 22:17
door Silver_Rain
Bedankt voor die tip, ik ga een aparte gebruiker aanmaken die alleen dient voor teamspeak.
Daarna ga ik nog eens proberen dat script te laten lopen tijdens het opstarten :wink:

Re: automatisch programma laten starten linux

Geplaatst: 22 sep 2011, 17:25
door Silver_Rain
zo aparte gebruiker is aangemaakt.
Nu moet ik enkel nog de symbolic link maken zodat mijn nas weet welk script hij moet starten.

Maar update-rc.d werkt niet op de nas

NAS> update-rc.d ts3.sh defaults
-ash: update-rc.d: not found

Hoe kan ik het nog anders doen?
Ook kan ik mijn script niet uitvoeren, dan krijg ik nog steeds volgende melding:


NAS> ./ts3.sh start
BusyBox v1.16.1 (2011-06-29 11:52:19 CST) multi-call binary.

Usage: readlink FILE

Display the value of a symlink

Could not locate binary file, aborting

Re: automatisch programma laten starten linux

Geplaatst: 22 sep 2011, 21:50
door Silver_Rain
ondertussen is het me gelukt.
Heb mijn script ook wat aangepast.
Ook heb ik een aparte gebruiker aangemaakt die enkel toegang heeft tot zijn home map.

script ziet er nu als volgt uit

#!/bin/sh
###BEGIN INIT INFO##################
#
# ts3.sh
# Starts TS3 Server at Startup
# and stops at shutdown /reboot
#
###END INIT INFO####################

case $1 in
start)
cd /home/teamspeak/ts3
sh /home/teamspeak/ts3/ts3server_startscript.sh start
;;
stop)
cd /home/teamspeak/ts3
sh /home/teamspeak/ts3/ts3server_startscript.sh stop
;;
*)
echo "Usage: $0 [start|stop]"
;;
esac