From e43e1e35cd5e64bc82ab57cb4985596d27a4f5b3 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 24 Sep 2015 09:28:04 +1000 Subject: [PATCH] Add multiple instance control for systemd --- tools/install.sh | 7 +-- tools/systemd/arkdaemon.init | 88 ------------------------------- tools/systemd/arkdeamon.service | 12 ----- tools/systemd/arkmanager.init | 5 ++ tools/systemd/arkmanager.service | 11 ++++ tools/systemd/arkmanager@.service | 6 +++ 6 files changed, 26 insertions(+), 103 deletions(-) delete mode 100755 tools/systemd/arkdaemon.init delete mode 100644 tools/systemd/arkdeamon.service create mode 100755 tools/systemd/arkmanager.init create mode 100644 tools/systemd/arkmanager.service create mode 100644 tools/systemd/arkmanager@.service diff --git a/tools/install.sh b/tools/install.sh index f88ae92..435c6f8 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -251,11 +251,12 @@ else fi elif [ -f /etc/systemd/system.conf ]; then # used by systemd mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}" - cp systemd/arkdaemon.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" - cp systemd/arkdeamon.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" + cp systemd/arkmanager.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" sed -i "s|=/usr/libexec/arkmanager/|=${LIBEXECDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager.service" - sed -i "s@^DAEMON=\"/usr/bin/@DAEMON=\"${BINDIR}/@" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init" + cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" + sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl enable arkmanager.service echo "Ark server will now start on boot, if you want to remove this feature run the following line" diff --git a/tools/systemd/arkdaemon.init b/tools/systemd/arkdaemon.init deleted file mode 100755 index 2cde2ab..0000000 --- a/tools/systemd/arkdaemon.init +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# -# /usr/libexec/arkmanager/arkmanager.init -# -# ARK manager daemon -# -# chkconfig: 2345 80 20 -# description: ARK manager daemon used to start the server and keep it updated -# processname: ShooterGameServer -# config: /etc/arkmanager/arkmanager.cfg - -### BEGIN INIT INFO -# Provides: ARK manager deamon -# Required-Start: networking -# Required-Stop: networking -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: ARK manager deamon -# Description: ARK manager daemon used to start the server and keep it updated -# -### END INIT INFO - -# Global variables -source /etc/arkmanager/arkmanager.cfg - -NAME="ShooterGameServer" -LOGFILE="${logdir}/${NAME}.log" -DAEMON="/usr/bin/arkmanager" - -GREEN="\\033[1;32m" -RED="\\033[1;31m" -NORMAL="\\033[0;39m" - -set -e - -# If the daemon is not there, then exit. -test -x $DAEMON || exit 5 - -case "$1" in - start) - echo -n "Starting $NAME: " - ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user > /dev/null - sleep 5 - PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` - if [ -n "$PID" ]; then - echo "$PID" >/var/run/arkmanager.pid - echo "[" "$GREEN" " OK " "$NORMAL" "]" - exit 0 - else - echo "[" "$RED" " FAILED " "$NORMAL" "]" - exit 1 - fi - ;; - - stop) - echo -n "Stopping $NAME: " - su -s /bin/sh -c "$DAEMON stop" $steamcmd_user > /dev/null - sleep 5 - PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` - if [ -n "$PID" ]; then - echo "[" "$RED" " FAILED " "$NORMAL" "]" - exit 1 - else - echo "[" "$GREEN" " OK " "$NORMAL" "]" - rm /var/run/arkmanager.pid - exit 0 - fi - ;; - - restart) - echo -n "Restarting $NAME: " - ulimit -n 100000 - su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null - echo "OK" - ;; - - status) - su -s /bin/sh -c "$DAEMON status" $steamcmd_user - exit 0 - ;; - - *) - # For invalid arguments, print the usage message. - echo "Usage: $0 {start|stop|restart|status}" - exit 1 - ;; -esac diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service deleted file mode 100644 index a92f7ed..0000000 --- a/tools/systemd/arkdeamon.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Daemon to start ark server -After=network.target - -[Service] -ExecStart=/usr/libexec/arkmanager/arkmanager.init start --all -ExecStop=/usr/libexec/arkmanager/arkmanager.init stop --all -Type=forking -PIDFile=/var/run/arkmanager.pid - -[Install] -WantedBy=multi-user.target diff --git a/tools/systemd/arkmanager.init b/tools/systemd/arkmanager.init new file mode 100755 index 0000000..be25029 --- /dev/null +++ b/tools/systemd/arkmanager.init @@ -0,0 +1,5 @@ +#!/bin/bash + +for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do + systemctl start arkmanager@${service#configfile_} +done diff --git a/tools/systemd/arkmanager.service b/tools/systemd/arkmanager.service new file mode 100644 index 0000000..c2d4053 --- /dev/null +++ b/tools/systemd/arkmanager.service @@ -0,0 +1,11 @@ +[Unit] +Description=Starts and stops all ark server instances +After=network.target + +[Service] +ExecStart=/usr/libexec/arkmanager/arkmanager.init start +ExecStop=/usr/libexec/arkmanager/arkmanager.init stop +Type=oneshot + +[Install] +WantedBy=multi-user.target diff --git a/tools/systemd/arkmanager@.service b/tools/systemd/arkmanager@.service new file mode 100644 index 0000000..49b722c --- /dev/null +++ b/tools/systemd/arkmanager@.service @@ -0,0 +1,6 @@ +[Unit] +Description=Daemon to start an ark server instance + +[Service] +ExecStart=/usr/bin/arkmanager useconfig %i run +Type=simple