docker-tmserver/tmserver/tmserver

261 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
#
# entrypoint script for trackmania server
#
# Maintainer : Hendrik Boll
# Github : ryluth
#
##############################################
TMDIR="${TMDIR:-/opt/tmserver}"
ASECODIR="${ASECODIR:-/opt/xaseco}"
GAME_SETTINGS="${GAME_SETTINGS:-MatchSettings/default.txt}"
DEDICATED_CFG="${DEDICATED_CFG:-default.txt}"
set -e
if [[ "$1" = "start" && "$(id -u)" = "0" ]]
then
chown -R trackmania:trackmania /opt/tmserver
chown -R trackmania:trackmania /opt/xaseco
su trackmania "$0" "$@"
fi
case "$1" in
start)
case "$2" in
tmserver)
cd $TMDIR
if [[ -e tmserver.pid ]]
then
if ( kill -0 $(cat tmserver.pid) 2> /dev/null )
then
echo "The server is already running, try restart or stop."
exit 1
else
echo "tmserver.pid found, but no server running. The server possibly crashed."
echo "Please review the log files."
rm tmserver.pid
fi
fi
if [[ "$(id -u)" = "0" ]]
then
echo "WARNING! For security reasons i don't advise to run the server as ROOT!"
fi
echo "Starting the Trackmania server"
if [[ -e "./TrackmaniaServer" ]]
then
if [[ ! -x "./TrackmaniaServer" ]]
then
echo "TrackmaniaServer is not executable, trying to set +x"
chmod u+x "./TrackmaniaServer"
fi
if [[ -x "./TrackmaniaServer" ]]
then
cd $ASECODIR
if [[ -e aseco.pid ]]
then
echo "Stopping Xaseco in case it was running."
echo "Xaseco cannot be running when starting the Trackmania server."
"$0" "stop" "xaseco"
fi
cd $TMDIR
./TrackmaniaServer /nodaemon /internet /game_settings=${GAME_SETTINGS} /dedicated_cfg=${DEDICATED_CFG} &
PID=$!
ps -p ${PID} > /dev/null 2>&1
if [[ "$?" -ne "0" ]]
then
echo "Trackmania server could not start"
else
echo "Trackmania server started"
echo ${PID} > tmserver.pid
sleep 3
echo "Starting Xaseco now."
"$0" "start" "xaseco"
fi
else
echo "Trackmania server binary is not executable, cannot start the server."
fi
else
echo "Cannot find the Trackmania executable"
exit 5
fi
;;
xaseco)
cd $ASECODIR
if [[ -e aseco.pid ]]
then
if ( kill -0 $(cat aseco.pid) 2> /dev/null )
then
echo "Xaseco is already running."
exit 1
else
echo "aseco.pid found but no server running. Aseco possibly crashed."
echo "Please review the log files."
rm aseco.pid
fi
fi
if [[ "$(id -u)" = "0" ]]
then
echo "WARNING! For security reasons i don't advise to run the server as ROOT!"
fi
echo "Starting the Xaseco service"
if [[ -e "./aseco.php" ]]
then
php ./aseco.php TMF </dev/null >aseco.log 2>&1 &
PID=$!
ps -p ${PID} > /dev/null 2>&1
if [[ "$?" -ne "0" ]]
then
echo "Xaseco could not start"
else
echo "Xaseco started. Please test the functionality ingame."
echo "In certain cases Xaseco is unable to integrate into the game."
echo "If the features are not loaded consider restarting both services"
echo ${PID} > aseco.pid
fi
else
echo "Canot find the Xaseco executable"
exit 5
fi
;;
*)
echo "Usage : ./tmserver.sh start {tmserver|xaseco}"
exit 2
esac
;;
stop)
case "$2" in
tmserver)
cd $TMDIR
if [[ -e tmserver.pid ]]
then
echo -n "Stopping the Trackmania server"
if ( kill -TERM $(cat tmserver.pid) 2> /dev/null )
then
c=1
while [[ "$c" -le 120 ]]
do
if (kill -0 $(cat tmserver.pid) 2> /dev/null)
then
echo -n "."
sleep 1
else
break
fi
c=$(($c+1))
done
fi
if ( kill -0 $(cat tmserver.pid) 2> /dev/null )
then
echo "Server is not shutting down cleanly - killing the process"
kill -KILL $(cat tmserver.pid)
else
echo "done"
fi
rm tmserver.pid
echo "Shutting down Xaseco aswell. If it crashed by this point, at least i am cleaning up now..."
"$0" "stop" "xaseco"
else
echo "No server is running"
exit 7
fi
;;
xaseco)
cd $ASECODIR
if [[ -e aseco.pid ]]
then
echo -n "Stopping the Xaseco service"
if ( kill -TERM $(cat aseco.pid) 2> /dev/null )
then
c=1
while [[ "$c" -le 120 ]]
do
if (kill -0 $(cat aseco.pid) 2> /dev/null )
then
echo -n "."
sleep 1
else
break
fi
c=$(($c+1))
done
fi
if (kill -0 $(cat aseco.pid) 2> /dev/null )
then
echo "Xaseco is not shutting down cleanly - killing the process"
kill -KILL $(cat aseco.pid)
else
echo "done"
fi
rm aseco.pid
else
echo "Xaseco isn't running"
exit 7
fi
;;
*)
echo "Usage: ./tmserver stop {tmserver|xaseco}"
exit 2
esac
;;
restart)
case "$2" in
tmserver)
cd $TMDIR
$0 stop tmserver && $0 start tmserver || exit 1
;;
xaseco)
cd $ASECODIR
$0 stop xaseco && $0 start xaseco || exit 1
;;
*)
echo "Usage : ./tmserver restart {tmserver|xaseco}"
exit 2
esac
;;
status)
case "$2" in
tmserver)
cd $TMDIR
if [[ -e tmserver.pid ]]
then
if (kill -0 $(cat tmserver.pid) 2> /dev/null )
then
echo "Trackmania server is up and running."
echo "In case of connectivity problems, try restarting your client"
echo "If nothing helps use ./tmservser restart tmserver"
else
echo "The server might have crashed (tmserver.pid exists but the process is not reachable)"
fi
else
echo "No server is currently running"
fi
;;
xaseco)
cd $ASECODIR
if [[ -e aseco.pid ]]
then
if (kill -0 $(cat aseco.pid) 2> /dev/null )
then
echo "Xaseco is up and running."
echo "In case of missing features ingame, try restarting the whole server."
echo "Use ./tmserver restart tmserver"
else
echo "Xaseco might have crashed (aseco.pid exists but the process is not reachable)"
fi
else
echo "Xaseco is currently not running"
fi
;;
*)
echo "Usage : ./tmserver status {tmserver|xaseco}"
exit 2
esac
;;
*)
echo "Usage: ./tmserver {start|stop|restart|status} {tmserver|xaseco}"
esac
exit 0