Bonkersoft
Fragen Tipps und Nippes
Navigation

Suche
Suche
   
Suche
Teamspeak 3 Start/Stop Script
Beitrag von Christian
geschrieben: 18.01.2010 0:24
  ts3server.ini erstellen mit folgendem inhalt:
text-Code:
machine_id=
default_voice_port=9987
voice_ip=192.168.0.1
licensepath=./
filetransfer_port=30033
filetransfer_ip=192.168.0.1
query_port=10011
query_ip=192.168.0.1
dbplugin=ts3db_sqlite3
dbpluginparameter=
dbsqlpath=sql/
dbsqlcreatepath=create_sqlite/
logpath=logs
logquerycommands=1

192.168.0.1 mit Deiner Server IP ersetzen.

Inhalt von TS3.sh  das eigentliche Start/Stop Script.
bash-Code:
#!/bin/bash
 
# Verzeichnis von Teamspeak 3
TS3_DIR="/var/www/chris/teamspeak3/"
# verwendetes Binary ts3server_linux_x86 oder ts3server_linux_amd64
TS3_BIN="ts3server_linux_x86"
# muss sich im Verzeichniss TS3_DIR befinden.
TS3_INI="ts3server.ini"
# Belibiger name. Werden mehrere Server verwendet, für jeden Server einen anderen namen
TS3_SCREENNAME="TS3"
# Für welchen Benutzer wird der TS Server verwendet.
TS3_USER="chris"
 
# System Programme
SCREEN="/usr/bin/screen"
EGREP="/bin/egrep"
CUT="/usr/bin/cut"
SED="/bin/sed"
AWK="/usr/bin/awk"
PS="/bin/ps"
KILL="/bin/kill"
SU="/bin/su"
 
PID_SCREEN=0;
STATUS_SCREEN="Unbekannt"
PID_TS3=0;
STATUS_TS3="OFFLINE"
 
# Neter hinweis von http://newsgroups.derkeiler.com/Archive/De/de.comp.os.unix.shell/2008-07/msg00044.html
function ltrim()
{
    echo "$1" | $SED -e "s/^ *//";
}
 
function rtrim()
{
    echo "$1" | $SED -e "s/ *$//";
}
 
function trim()
{
    x="$(ltrim "$1")"; echo "$(rtrim "$x")";
}
 
function screen_status ()
{
    if [ "$UID" -eq 0 ]
    then
        local STAT=$(${SU} -c "${SCREEN} -ls|${EGREP} \"[[:digit:]]+\.${TS3_SCREENNAME}\"" ${TS3_USER})
    else
        local STAT=$(${SCREEN} -ls|${EGREP} "[[:digit:]]+\.${TS3_SCREENNAME}")
    fi
    # pgrep kann auch die Pid ermitteln. Würde aber bei mehreren Usern alle screen Pids auflisten
    local PID="$(echo ${STAT}|${CUT} -d "." -s -f1)"
    local STATUS="$(echo ${STAT}|${AWK} '{print $4}')"
    PID="$(trim "$PID")"
    if [ -n "${PID}" ]
    then
        PID_SCREEN="${PID}"
    else
        PID_SCREEN=0
    fi
    if [ -n "${STATUS}" ]
    then
        STATUS_SCREEN="${STATUS}"
    else
        STATUS_SCREEN="Unbekannt"
    fi
}
 
function ts3_status ()
{
    local STAT=$(${PS} -u ${TS3_USER} x --no-header -o pid,comm|${EGREP} -i ts3server)
    local PID="$(echo ${STAT}|${AWK} '{print $1}')"
    PID_TS3="$(trim "$PID")"
    if [ "${PID_TS3}" = "0" -o -z "${PID_TS3}" ]
    then
        STATUS_TS3="OFFLINE"
        PID_TS3=0;
    else
        STATUS_TS3="ONLINE"
    fi
}
 
case "$1" in
    start)
        screen_status
        ts3_status
        if [ "${STATUS_TS3}" = "ONLINE" -o "${PID_SCREEN}" -gt 0 ]
        then
            echo "Ts3 Server ist schon gestartet"
            $0 status
            exit 1
        fi
        if [ "$UID" -eq 0 ]
        then
            echo "Starte TS3 als für Benutzer ${TS3_USER}"
            echo "DEBUG $SU ${TS3_USER} -c \"${SCREEN} -d -m -S ${TS3_SCREENNAME} ./${TS3_BIN} inifile=${TS3_INI}\""
            cd ${TS3_DIR} || exit 1
            $($SU ${TS3_USER} -c "${SCREEN} -d -m -S ${TS3_SCREENNAME} ./${TS3_BIN} inifile=${TS3_INI}")
            #echo "ROOT kann keinen TS3 Server starten"
            #exit 0;
        else
            $(cd ${TS3_DIR}; ${SCREEN} -d -m -S ${TS3_SCREENNAME} ./${TS3_BIN} inifile=${TS3_INI})
        fi
        echo -n "Prüfe status einen moment."
        for i in $( seq 1 1 3 ) ; do echo -n " ."; sleep 1;done
        #$0 status
        screen_status
        ts3_status
        if [ ${STATUS_TS3} = "ONLINE" ]
        then
            echo " Server erfolgreich gestartet"
        fi
        echo "Screen Pid = ${PID_SCREEN}"
                echo "Screen Staus = ${STATUS_SCREEN}"
                echo "ts3 Pid = ${PID_TS3}"
                echo "ts3 Status = ${STATUS_TS3}"
        exit 1;
    ;;
    stop)
        screen_status
        ts3_status
        if [ "${STATUS_TS3}" = "OFFLINE" -o "${PID_TS3}" -eq 0 ]
        then
            echo "TS Server ist schon down";
        else
            if [ "${PID_TS3}" -gt 0 ]
            then
                echo "Beende TS3 pid ${PID_TS3}";
                $(${KILL} -9 ${PID_TS3})
            fi
        fi
 
        screen_status
        if [ "${PID_SCREEN}" -gt 0 ]
        then
            echo "Beende screen pid ${PID_SCREEN}";
            $(${KILL} -9 ${PID_SCREEN})
            if [ "$UID" -eq 0 ]
            then
                $SU -c "${SCREEN} -wipe" ${TS3_USER}
            else
                ${SCREEN} -wipe
            fi
        fi
        ts3_status
        if [ "${STATUS_TS3}" != "OFFLINE" -o "${STATUS_SCREEN}" != "Unbekannt" ]
        then
            echo "Fehler beim herunterfahren von TS3 Server = ${STATUS_TS3} screen = ${STATUS_SCREEN}"
            exit 1;
        fi
        echo "Ts3 Server erfolgreich herunter gefahren"
        exit 1;
    ;;
    status)
        screen_status
        ts3_status
        echo "Screen Pid = ${PID_SCREEN}"
        echo "Screen Staus = ${STATUS_SCREEN}"
        echo "ts3 Pid = ${PID_TS3}"
        echo "ts3 Status = ${STATUS_TS3}"
        exit 1;
    ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 2;
    ;;
esac
exit 0
 


TS3.sh ausführbar machen und ausführen.

Hinweis: screen muss installiert sein