Index: source/tools/XpartaMuPP/systemd/pyrogenesis-lobbybots.service =================================================================== --- /dev/null +++ source/tools/XpartaMuPP/systemd/pyrogenesis-lobbybots.service @@ -0,0 +1,16 @@ +[Unit] +Description=Pyrogenesis/0 A.D. Lobby Bots +Documentation=https://trac.wildfiregames.com/ +After=ejabberd.service +Requires=ejabberd.service +SourcePath=/etc/init.d/ + +[Service] +Type=simple +RemainAfterExit=yes +ExecStart=/etc/init.d/pyrogenesis-lobbybots start +ExecStop=/etc/init.d/pyrogenesis-lobbybots stop +ExecReload=/etc/init.d/pyrogenesis-lobbybots stop + +[Install] +WantedBy=multi-user.target Index: source/tools/XpartaMuPP/systemd/pyrogenesis-lobbybots.sh =================================================================== --- /dev/null +++ source/tools/XpartaMuPP/systemd/pyrogenesis-lobbybots.sh @@ -0,0 +1,146 @@ +#! /bin/sh + +### BEGIN INIT INFO +# Provides: pyrogenesis-lobby-bots +# Required-Start: $remote_fs $network $named $time +# Required-Stop: $remote_fs $network $named $time +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Starts the 0 A.D. / Pyrogenesis lobby bots +# Description: Starts the 0 A.D. / Pyrogenesis lobby bots, which are scripts running in conjunction with an XMPP compliant server. +# +### END INIT INFO + +# chkconfig: 2345 90 10 +# description: 0 A.D. Lobby Bots +set -o errexit + +. /lib/lsb/init-functions + +# Use these commands to reload the service after editing... +# clear; systemctl disable pyrogenesis-lobbybots.service; systemctl daemon-reload; systemctl enable pyrogenesis-lobbybots.service; systemctl restart pyrogenesis-lobbybots.service; sleep 2; systemctl status pyrogenesis-lobbybots.service; + +# Use this command to see the full log +# journalctl -u pyrogenesis-lobbybots.service + +# Use this to follow the log live +# watch -n1 "journalctl -u pyrogenesis-lobbybots.service | tail -n 30" + +SU="/bin/su" +USER="nobody" +BASH="/bin/bash" +PATHLOBBYLOG="/lobby" +PATHBOTSCRIPTS="$PATHLOBBYLOG/XpartaMuPP/" +BOTARGSCOMMON="--domain localhost --use-tls False -v" + +BOTCOUNT=2 + +BOTNAME0="XpartaMuPP" +BOTROOM0="arena23" +BOTARGS0="--login xpartamupp --password password1 --nickname GamelistBot --elo echelon" + +BOTNAME1="EcheLOn" +BOTROOM1="arena23" +BOTARGS1="--login echelon --password password2 --nickname RatingBot" + +# Calls the given function, either "startbot" or "stopbot" +lobbybots() +{ + i=0 + while [ "$i" -lt $BOTCOUNT ] + do + BOTNAME="BOTNAME$i" + BOTROOM="BOTROOM$i" + BOTARGS="BOTARGS$i" + + eval "BOTNAME=\$$BOTNAME" + eval "BOTROOM=\$$BOTROOM" + eval "BOTARGS=\$$BOTARGS" + + LOGFILE="${PATHLOBBYLOG}${BOTROOM}/$BOTNAME.log" + PIDFILE="${PATHLOBBYLOG}${BOTROOM}/$BOTNAME.pid" + + # Call the given bot function + $1 "$BOTNAME" "$BOTROOM" "$PIDFILE" "$LOGFILE" "$BOTARGS" + + i=$(($i+1)) + done +} + +# Starts the given bot, if not running yet +startbot() +{ + BOTNAME=$1 + BOTROOM=$2 + PIDFILE=$3 + LOGFILE=$4 + BOTARGS=$5 + + if [ -f "$PIDFILE" ]; then + log_daemon_msg "$PIDFILE exists. If you are sure that the bot is not running, delete this file." + else + log_daemon_msg "Starting $BOTNAME, logging to $LOGFILE" + $SU -s $BASH -c "nohup python3 $BOTNAME.py --room $BOTROOM $BOTARGS $BOTARGSCOMMON > $LOGFILE & echo \$! > $PIDFILE" $USER + fi +} + +# Stops the given bot, if running +stopbot() +{ + BOTNAME=$1 + BOTROOM=$2 + PIDFILE=$3 + + if [ -f "$PIDFILE" ]; then + PID=`cat $PIDFILE` + log_daemon_msg "Killing $BOTNAME process $PID." + rm $PIDFILE + kill $PID + else + log_daemon_msg "$BOTROOM/$BOTNAME not running." + fi +} + +ensurePathsExists() +{ + test -d "$PATHLOBBYLOG" || { + log_daemon_msg "ERROR: Lobby folder not found: $PATHLOBBYLOG" + exit 1 + } + + test -d "$PATHBOTSCRIPTS" || { + log_daemon_msg "ERROR: Lobby bots script folder not found: $PATHBOTSCRIPTS" + exit 1 + } + + cd $PATHBOTSCRIPTS +} + +ensurePathsExists + +case "$1" in + start) + log_daemon_msg "Starting Pyrogenesis lobby bots..." + lobbybots "startbot" + log_daemon_msg "done." + ;; + stop) + log_daemon_msg "Stopping Pyrogenesis lobby bots..." + lobbybots "stopbot" + log_daemon_msg "done." + ;; + status) + # No-op + exit 0 + ;; + force-reload|restart) + "$0" stop + "$0" start + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status}" + exit 3 + ;; +esac + +exit 0