#!/bin/bash WORKDIR="$(dirname "$(readlink -f "$0")")" SCREEN_SOCKNAME="instantchat_server" SERVER_BIN="./server/chatserver.py" print_usage() { echo "usage: $0 start|stop|restart|status|attach|pull" } if [ $# -ne 1 ]; then print_usage exit 1 fi cd "$WORKDIR" server_status() { echo "Server status (screen -ls):" if screen -ls | grep $SCREEN_SOCKNAME; then echo "Server running" else echo "Server not running" fi } server_start() { if screen -ls | grep -q $SCREEN_SOCKNAME; then echo "Server is already running!" return 1 else echo "Starting server..." screen -dmS $SCREEN_SOCKNAME -L bash -c "$SERVER_BIN || read -p '-- press key to end screen session --'" fi } server_stop() { if screen -ls | grep -q $SCREEN_SOCKNAME; then echo "Stopping server..." kill $(screen -ls | grep $SCREEN_SOCKNAME | grep -o '[0-9]*') else echo "Server is not running!" fi } server_restart() { server_stop server_start } server_attach() { echo "Attaching to screen session..." screen -r $SCREEN_SOCKNAME } server_pull() { echo "Pulling from repository..." if git pull --ff-only; then server_restart else echo "Error while pulling!" exit 1 fi } COMMAND=$1 case $COMMAND in start) server_start ;; stop) server_stop ;; restart) server_restart ;; status) server_status ;; attach) server_attach ;; pull) server_pull ;; *) echo "unknown command" print_usage exit 1 esac