diff --git a/README.md b/README.md new file mode 100644 index 0000000..55e300d --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# SinusBot startscript + +## Installation + +1. Copy the file `sinusbot.service` to `/lib/systemd/system/sinusbot.service` +2. Adjust the following placeholders to your installation: + + placeholder | description | example + ------------------------------|---------------------------------------------|------------------------ + YOUR_USER | Your user who starts the bot | sinusbot + YOURPATH_TO_THE_BOT\_BINARY | Your path to the SinusBot binary | /opt/sinusbot/sinusbot + YOURPATH_TO_THE_BOT_DIRECTORY | Your path to the SinusBot install directory | /opt/sinusbot + +3. Reload systemd: `systemctl daemon-reload` +4. Enable autostart (optional) `systemctl enable sinusbot` +4. Start the sinusbot: `systemctl start sinusbot` diff --git a/sinusbot b/sinusbot deleted file mode 100644 index fea6a72..0000000 --- a/sinusbot +++ /dev/null @@ -1,188 +0,0 @@ -#! /bin/bash -### BEGIN INIT INFO -# Provides: sinusbot -# 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: {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="mybotuser" -DIR_ROOT="/opt/ts3soundboard/" -DIR_BACKUP="" -BOT_RUNCMD="./sinusbot" -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 - diff --git a/sinusbot.service b/sinusbot.service new file mode 100644 index 0000000..1417fd6 --- /dev/null +++ b/sinusbot.service @@ -0,0 +1,20 @@ +[Unit] +Description=Sinusbot, the Teamspeak 3 and Discord music bot. +Wants=network-online.target +After=syslog.target network.target network-online.target + +[Service] +User=YOUR_USER +ExecStartPre=/bin/rm -f /tmp/.sinusbot.lock +ExecStopPost=/bin/rm -f /tmp/.sinusbot.lock +ExecStart=YOURPATH_TO_THE_BOT_BINARY +WorkingDirectory=YOURPATH_TO_THE_BOT_DIRECTORY +Type=simple +KillSignal=2 +SendSIGKILL=yes +Environment=QT_XCB_GL_INTEGRATION=none +LimitNOFILE=512000 +LimitNPROC=512000 + +[Install] +WantedBy=multi-user.target