Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ### BEGIN INIT INFO
- # Provides: ts3-server
- # Required-Start: $local_fs $remote_fs $network $syslog
- # Required-Stop: $local_fs $remote_fs $network $syslog
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: starts the teamspeak3-server
- # Description: starts teamspeak3-server using start-stop-daemon
- ### END INIT INFO
- # Copyright (c) 2010 TeamSpeak Systems GmbH
- # All rights reserved
- # Modified by Alexey D. Filimonov [ alexey _A_T_ filimonic _dot_ net ]
- COMMANDLINE_PARAMETERS="${3}" #add any command line parameters you want to pass here
- D1=$(readlink -f "$0")
- DAEMONNAME="ts3-server"
- BINARYPATH="/usr/bin"
- SQLPATH="/usr/share/$DAEMONNAME/sql/"
- PIDFILE="/var/run/$DAEMONNAME.pid"
- cd "${BINARYPATH}"
- LIBRARYPATH="/usr/lib/$DAEMONNAME/"
- BINARYNAME="$DAEMONNAME"
- LOGPATH="/var/log/$DAEMONNAME/"
- LICENSEPATH="/etc/$DAEMONNAME/"
- INIPATH="/etc/$DAEMONNAME/$DAEMONNAME.ini"
- CMDLINEPATH="/etc/$DAEMONNAME/$DAEMONNAME.cmdlines"
- DEB_CMD="logpath=$LOGPATH dbsqlpath=$SQLPATH licensepath=$LICENSEPATH inifile=$INIPATH"
- WORKDIR="/var/$DAEMONNAME";
- # READ CONFIG
- #CMD_PARAMS=$(cat $CMDLINEPATH | while read CMDLINE; do echo $CMDLINE; done)
- CMD_PARAMS=` cat $CMDLINEPATH | { while read line ; do CMD_PARAMS="$CMD_PARAMS $line" ; done ; echo $CMD_PARAMS; } `
- /usr/sbin/adduser --system --no-create-home --shell /bin/true --group --disabled-password --disabled-login $DAEMONNAME > /dev/null
- COMMANDLINE_PARAMETERS="${DEB_CMD} ${CMD_PARAMS} ${COMMANDLINE_PARAMETERS}"
- mkdir -p $LOGPATH > /dev/null
- mkdir -p $WORKDIR > /dev/null
- chmod a+X /etc/$DAEMONNAME
- chmod -R u+r /etc/$DAEMONNAME
- chmod -R o+r /etc/$DAEMONNAME
- chmod -R g+r /etc/$DAEMONNAME
- chmod -R u+rwX $SQLPATH
- chmod -R o+rX-w $SQLPATH
- chmod -R g+rX-w $SQLPATH
- chown $DAEMONNAME:$DAEMONNAME $LOGPATH
- chmod u+rwX $LOGPATH
- chmod o+rX-w $LOGPATH
- chmod g+rX-w $LOGPATH
- chown $DAEMONNAME:$DAEMONNAME $WORKDIR
- chmod u+rwX $WORKDIR
- chmod o-w $WORKDIR
- chmod g-w $WORKDIR
- if [ "${2}" != "nodaemon" ]
- then
- DO_DAEMONIZE="YES"
- fi
- case "$1" in
- start)
- if [ -e $PIDFILE ]; then
- if ( kill -0 $(cat $PIDFILE) 2> /dev/null ); then
- echo "The server is already running, try restart or stop"
- exit 1
- else
- echo "$PIDFILE found, but no server running. Possibly your previously started server crashed"
- echo "Please view the logfile for details."
- rm $PIDFILE
- 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 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
- #export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
- #export LD_DEBUG=files
- touch $PIDFILE
- chown $DAEMONNAME:$DAEMONNAME $PIDFILE
- chmod a+w $PIDFILE
- if [ "$DO_DAEMONIZE" = "YES" ] ; then
- echo "Going background"
- LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}" start-stop-daemon --start --startas $BINARYPATH/$BINARYNAME --pidfile $PIDFILE --name $DAEMONNAME --chuid $DAEMONNAME --background --make-pidfile --verbose --chdir $WORKDIR $COMMANDLINE_PARAMETERS
- # sudo -b -u $DAEMONNAME /bin/sh -c "cd ${WORKDIR} ; LD_LIBRARY_PATH=\"${LIBRARYPATH}:${LD_LIBRARY_PATH}\" ${BINARYPATH}/${BINARYNAME} ${COMMANDLINE_PARAMETERS} \& ; echo XX\$! > $PIDFILE ; exit ;" ;
- else
- echo "Leaving foreground. Press Ctrl+C to stop"
- LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}" start-stop-daemon --start --startas $BINARYPATH/$BINARYNAME --pidfile $PIDFILE --name $DAEMONNAME --chuid $DAEMONNAME --make-pidfile --verbose --chdir $WORKDIR $COMMANDLINE_PARAMETERS
- # sudo -u $DAEMONNAME /bin/sh -c "cd ${WORKDIR} ; LD_LIBRARY_PATH=\"${LIBRARYPATH}:${LD_LIBRARY_PATH}\" ${BINARYPATH}/${BINARYNAME} ${COMMANDLINE_PARAMETERS} ; echo \$! > $PIDFILE ; exit "
- fi
- sleep 3
- chown root:root $PIDFILE
- chmod a-w $PIDFILE
- chmod u+rwx $PIDFILE
- echo "PID:"
- cat $PIDFILE
- #echo $! > $PIDFILE
- echo "TeamSpeak 3 server started, for details please view the log file"
- else
- echo "${BINARNAME} is not exectuable, cannot start TeamSpeak 3 server"
- fi
- else
- echo "Could not find binary, aborting"
- exit 5
- fi
- ;;
- stop)
- if [ -e $PIDFILE ]; then
- echo -n "Stopping the TeamSpeak 3 server"
- if ( kill -TERM $(cat $PIDFILE) 2> /dev/null ); then
- c=1
- while [ "$c" -le 300 ]; do
- if ( kill -0 $(cat $PIDFILE) 2> /dev/null ); then
- echo -n "."
- sleep 1
- else
- break
- fi
- c=$((++c))
- done
- fi
- if ( kill -0 $(cat $PIDFILE) 2> /dev/null ); then
- echo "Server is not shutting down cleanly - killing"
- kill -KILL $(cat $PIDFILE)
- else
- echo "done"
- fi
- rm $PIDFILE
- else
- echo "No server running ($PIDFILE is missing)"
- exit 7
- fi
- ;;
- restart)
- $0 stop && $0 start || exit 1
- ;;
- status)
- if [ -e $PIDFILE ]; then
- if ( kill -0 $(cat $PIDFILE) 2> /dev/null ); then
- echo "Server is running"
- else
- echo "Server seems to have died"
- fi
- else
- echo "No server running ($PIDFILE is missing)"
- fi
- ;;
- *)
- echo "Usage: ${0} {start|stop|restart|status} [{nodaemon|daemon}[addtional_command_line_parameter_1]]"
- exit 2
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement