here's the script I use
#! /bin/bash
### BEGIN INIT INFO
# Provides: ts3bot
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Sinusbot
### END INIT INFO
##################################################################################
# #
# Usage: ./launch.sh {start|stop|status|restart|console|update|backup} #
# - start: start the bot #
# - stop: stop the bot #
# - status: display the status of the bot (down or up) #
# - restart: restart the bot #
# - console: display the bot console #
# - update: runs the bot updater (with start & stop)
# - backup: archives your bot root directory
# To exit the console without stopping the server, press CTRL + A then D. #
# #
##################################################################################
SCREEN_NAME="sinusbot"
USER="sinusbot"
DIR_ROOT="/home/sinusbot/"
DIR_BACKUP=""
BOT_RUNCMD="./sinusbot -RunningAsRootIsEvilAndIKnowThat"
BOT_UPDATE_ARG=" -update"
SCREEN_IGNORE_TTY="N" # Y = Ignore the tty, you can access the bot screen as root (i not recommend it) root should be disabled
| N = disabled
# No edits necessary beyond this line
PATH=/bin:/usr/bin:/sbin:/usr/sbin
if [ ! -x `which screen` ]; then echo "ERROR: You need screen for this script (try apt-get install screen)"; exit 1; fi
if [ ! -x `which tar` ]; then echo "WARNING: You need tar for the Backup Function (try apt-get install tar)"; fi
function start {
if [ ! -d $DIR_ROOT ]; then echo "ERROR: $DIR_ROOT is not a directory"; exit 1; fi
if status; then echo "$SCREEN_NAME is already running"; exit 1; fi
# Start bot
if [ `whoami` = root ]
then
su - $USER -c "cd $DIR_ROOT ; screen -AmdS $SCREEN_NAME $BOT_RUNCMD"
else
cd $DIR_ROOT
screen -AmdS $SCREEN_NAME $BOT_RUNCMD
fi
}
function backup {
DATE=$(date +%Y-%m-%d)
if [ `whoami` = root ]
then
su - $USER -c "cd $DIR_ROOT ; tar -cjpf $DIR_BACKUP/sinusbot-$DATE.tar.bz2 $DIR_ROOT"
else
cd $DIR_ROOT
tar -cjpf $DIR_BACKUP/sinusbot-$DATE.tar.bz2 $DIR_ROOT
fi
}
function update {
if [ `whoami` = root ]
then
su - $USER -c "cd $DIR_ROOT ; $BOT_RUNCMD$BOT_UPDATE_ARG"
else
cd $DIR_ROOT
$BOT_RUNCMD$BOT_UPDATE_ARG
fi
}
function stop {
if ! status; then echo "$SCREEN_NAME could not be found. Probably not running."; exit 1; fi
if [ `whoami` = root ]
then
su - $USER -c "screen -S $SCREEN_NAME -X stuff '\003'"
else
screen -S $SCREEN_NAME -X stuff '\003'
fi
}
function status {
if [ `whoami` = root ]
then
su - $USER -c "screen -ls" | grep [.]$SCREEN_NAME[[:space:]] > /dev/null
else
screen -ls | grep [.]$SCREEN_NAME[[:space:]] > /dev/null
fi
}
function console {
if ! status; then echo "$SCREEN_NAME could not be found. Probably not running."; exit 1; fi
if [ `whoami` = root ]
then
if [ $SCREEN_IGNORE_TTY == 'Y' ]
then
su - $USER -c "script -q -c 'screen -x $SCREEN_NAME' /dev/null"
else
su - $USER -c "screen -x $SCREEN_NAME"
fi
else
screen -x $SCREEN_NAME
fi
}
function usage {
echo "Usage: $0 {start|stop|status|restart|console}"
echo "On console, press CTRL+A then D to stop the screen without stopping the server."
}
case "$1" in
start)
echo "Using following data:"
echo "USER: $USER"
echo "DIR ROOT: $DIR_ROOT"
echo "BOT RUN CMD: $BOT_RUNCMD"
echo ""
sleep 2
echo "Starting $SCREEN_NAME..."
start
sleep 2
echo "$SCREEN_NAME started successfully"
;;
stop)
echo "Stopping $SCREEN_NAME..."
stop
sleep 2
echo "$SCREEN_NAME stopped successfully"
;;
restart)
echo "Restarting $SCREEN_NAME..."
status && stop
sleep 5
start
sleep 2
echo "$SCREEN_NAME restarted successfully"
;;
status)
if status
then echo "$SCREEN_NAME is UP"
else echo "$SCREEN_NAME is DOWN"
fi
;;
console)
echo "Open console on $SCREEN_NAME..."
console
;;
update)
if status
then stop && sleep 5 && update
else update
fi
;;
backup)
if [ -d "$DIR_BACKUP" ]
then
if status
then stop && sleep 5 && backup
else backup
fi
else echo "BACKUP DIRECTORY NOT EXISTS. EXIT!"; exit 1;
fi
;;
*)
usage
exit 1
;;
esac
exit 0