Merge pull request #399 from FezVrasta/1.5-dev

Release v1.5
This commit is contained in:
Fez Vrasta 2016-02-17 00:02:59 +01:00
commit 46f8c16828
14 changed files with 950 additions and 304 deletions

View File

@ -1 +1 @@
1.4
1.5

File diff suppressed because it is too large Load Diff

View File

@ -11,29 +11,35 @@ steamcmd_appinfocache="/home/steam/Steam/appcache/appinfo.vdf" # cache of t
#steamlogin="anonymous" # Uncomment this to specify steam login instead of using anonymous login
# config environment
arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK)
arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable
arkbackupdir="/home/steam/ARK-Backups" # path to backup directory
arkwarnminutes="60" # number of minutes to warn players when using update --warn
arkautorestartfile="ShooterGame/Saved/.autorestart" # path to autorestart file
arkAutoUpdateOnStart="false" # set this to true if you want to always update before startup
arkBackupPreUpdate="false" # set this to true if you want to perform a backup before updating
#arkStagingDir="/home/steam/ARK-Staging" # Uncomment to enable updates to be fully downloaded before restarting the server (reduces downtime while updating)
# Options to automatically remove old backups to keep backup size in check
# Each compressed backup is generally about 1-2MB in size.
arkMaxBackupSizeMB="500" # Set to automatically remove old backups when size exceeds this limit
#arkMaxBackupSizeGB="2" # Uncomment this and comment the above to specify the limit in whole GB
# Update warning messages
# Modify as desired, putting the %d replacement operator where the number belongs
msgWarnUpdateMinutes="This ARK server will shutdown for an update in %d minutes"
msgWarnUpdateSeconds="This ARK server will shutdown for an update in %d seconds"
msgWarnRestartMinutes="This ARK server will shutdown for a restart in %d minutes"
msgWarnRestartSeconds="This ARK server will shutdown for a restart in %d seconds"
msgWarnShutdownMinutes="This ARK server will shutdown in %d minutes"
msgWarnShutdownSeconds="This ARK server will shutdown in %d seconds"
# ARK server options - use ark_<optionname>=<value>
# ARK server common options - use ark_<optionname>=<value>
# comment out these values if you want to define them
# inside your GameUserSettings.ini file
serverMap="TheIsland" # server map (default TheIsland)
#serverMapModId="469987622" # Uncomment this to specify the Map Mod Id (<fileid> in http://steamcommunity.com/sharedfiles/filedetails/?id=<fileid>)
#ark_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod
ark_RCONEnabled="True" # Enable RCON Protocol
ark_RCONPort="32330" # RCON Port
ark_SessionName="ARK Server Tools" # if your session name needs special characters please use the .ini instead
ark_Port="7778" # ARK server port (default 7778)
ark_QueryPort="27015" # ARK query port (default 27015)
ark_ServerPassword="" # ARK server password, empty: no password required to login
ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE!
ark_MaxPlayers="70"
@ -48,7 +54,6 @@ ark_MaxPlayers="70"
#arkopt_StructureDestructionTag=DestroySwampSnowStructures
# config Service
servicename="arkserv" # Name of the service (don't change if you don't know what are you doing)
logdir="/var/log/arktools" # Logs path (default /var/log/arktools)
# steamdb specific
@ -63,3 +68,5 @@ mod_branch=Windows
# alternate configs
# example for config name "ark1":
#configfile_ark1="/path/to/config/file"
#defaultinstance="main"

View File

@ -99,10 +99,14 @@ if [ "$userinstall" == "yes" ]; then
PREFIX="${PREFIX:-${HOME}}"
EXECPREFIX="${EXECPREFIX:-${PREFIX}}"
DATAPREFIX="${DATAPREFIX:-${PREFIX}/.local/share}"
CONFIGFILE="${PREFIX}/.arkmanager.cfg"
INSTANCEDIR="${PREFIX}/.config/arkmanager/instances"
else
PREFIX="${PREFIX:-/usr/local}"
EXECPREFIX="${EXECPREFIX:-${PREFIX}}"
DATAPREFIX="${DATAPREFIX:-${PREFIX}/share}"
CONFIGFILE="/etc/arkmanager/.arkmanager.cfg"
INSTANCEDIR="/etc/arkmanager/instances"
fi
BINDIR="${BINDIR:-${EXECPREFIX}/bin}"
@ -155,8 +159,17 @@ if [ "$userinstall" == "yes" ]; then
# Create a folder in ~/logs to let Ark tools write its own log files
mkdir -p "${INSTALL_ROOT}${PREFIX}/logs/arktools"
# Create a folder in ~/.config/arkamanger to hold instance configs
mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}"
# Copy example instance config
cp instance.cfg.example "${INSTALL_ROOT}/${INSTANCEDIR}/instance.cfg.example"
# Change the defaults in the new instance config template
sed -i -e "s|\"/home/steam|\"${PREFIX}|" \
"${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
# Copy arkmanager.cfg to ~/.arkmanager.cfg.NEW
cp arkmanager.cfg "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW"
cp arkmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.NEW"
# Change the defaults in the new config file
sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"--me\"|" \
-e "s|\"/home/steam|\"${PREFIX}|" \
@ -164,35 +177,18 @@ if [ "$userinstall" == "yes" ]; then
-e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \
-e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \
-e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \
"${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW"
"${INSTALL_ROOT}${CONFIGFILE}.NEW"
# Copy arkmanager.cfg to ~/.arkmanager.cfg if it doesn't already exist
if [ -f "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" ]; then
newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid )
newopt_steamcmd_appinfocache="${PREFIX}/Steam/appcache/appinfo.vdf"
newopt_arkbackupdir="${PREFIX}/ARK-Backups"
newopt_arkautorestartfile="ShooterGame/Saved/.autorestart"
newopt_install_bindir="${BINDIR}"
newopt_install_libexecdir="${LIBEXECDIR}"
newopt_install_datadir="${DATADIR}"
newopt_mod_appid=346110
if grep '^\(servermail\|arkstVersion\)=' "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" >/dev/null 2>&1; then
sed -i '/^\(servermail\|arkstVersion\)=/d' "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg"
fi
for optname in "${newopts[@]}"; do
if ! grep "^${optname}=" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg" >/dev/null 2>&1; then
noptname="newopt_${optname}"
echo "${optname}='${!noptname}'" >>"${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg"
fi
done
if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then
bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}"
bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg"
echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."
echo "A copy of the new configuration file was included in '${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW'. Make sure to review any changes and update your config accordingly!"
echo "A copy of the new configuration file was included in '${CONFIGFILE}.NEW'. Make sure to review any changes and update your config accordingly!"
exit 2
else
mv -n "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg.NEW" "${INSTALL_ROOT}${PREFIX}/.arkmanager.cfg"
mv -n "${INSTALL_ROOT}${CONFIGFILE}.NEW" "${INSTALL_ROOT}${CONFIGFILE}"
fi
else
# Copy arkmanager to /usr/bin and set permissions
@ -214,11 +210,12 @@ else
if [ -f /etc/systemd/system.conf ]; then # used by systemd
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
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"
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
if [ -z "${INSTALL_ROOT}" ]; then
systemctl daemon-reload
systemctl enable arkmanager.service
@ -241,11 +238,12 @@ else
if [ -f /etc/systemd/system.conf ]; then # used by systemd
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
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"
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
if [ -z "${INSTALL_ROOT}" ]; then
systemctl daemon-reload
systemctl enable arkmanager.service
@ -274,11 +272,12 @@ else
elif [ -f /etc/systemd/system.conf ]; then # used by systemd
mkdir -p "${INSTALL_ROOT}${LIBEXECDIR}"
cp systemd/arkmanager.init "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
sed -i "s|^DAEMON=\"/usr/bin/|DAEMON=\"${BINDIR}/|" "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
chmod +x "${INSTALL_ROOT}${LIBEXECDIR}/arkmanager.init"
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"
cp systemd/arkmanager@.service "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
sed -i "s|=/usr/bin/|=${BINDIR}/|;s|=steam$|=${steamcmd_user}|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service"
if [ -z "${INSTALL_ROOT}" ]; then
systemctl daemon-reload
systemctl enable arkmanager.service
@ -291,43 +290,34 @@ else
mkdir -p "${INSTALL_ROOT}/var/log/arktools"
chown "$steamcmd_user" "${INSTALL_ROOT}/var/log/arktools"
# Create a folder in /etc/arkmanager to hold instance config files
mkdir -p "${INSTALL_ROOT}${INSTANCEDIR}"
chown "$steamcmd_user" "${INSTALL_ROOT}${INSTANCEDIR}"
# Copy example instance config
cp instance.cfg.example "${INSTALL_ROOT}${INSTANCEDIR}/instance.cfg.example"
# Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists
mkdir -p "${INSTALL_ROOT}/etc/arkmanager"
cp arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW"
chown "$steamcmd_user" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW"
chown "$steamcmd_user" "${INSTALL_ROOT}/etc/arkmanager"
cp arkmanager.cfg "${INSTALL_ROOT}${CONFIGFILE}.NEW"
chown "$steamcmd_user" "${INSTALL_ROOT}${CONFIGFILE}.NEW"
sed -i -e "s|^steamcmd_user=\"steam\"|steamcmd_user=\"$steamcmd_user\"|" \
-e "s|\"/home/steam|\"/home/$steamcmd_user|" \
-e "s|^install_bindir=.*|install_bindir=\"${BINDIR}\"|" \
-e "s|^install_libexecdir=.*|install_libexecdir=\"${LIBEXECDIR}\"|" \
-e "s|^install_datadir=.*|install_datadir=\"${DATADIR}\"|" \
"${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW"
"${INSTALL_ROOT}${CONFIGFILE}.NEW"
if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then
newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid )
newopt_steamcmd_appinfocache="/home/${steamcmd_user}/Steam/appcache/appinfo.vdf"
newopt_arkbackupdir="/home/${steamcmd_user}/ARK-Backups"
newopt_arkautorestartfile="ShooterGame/Saved/.autorestart"
newopt_install_bindir="${BINDIR}"
newopt_install_libexecdir="${LIBEXECDIR}"
newopt_install_datadir="${DATADIR}"
newopt_mod_appid=346110
if grep '^\(servermail\|arkstVersion\)=' "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" >/dev/null 2>&1; then
sed -i '/^\(servermail\|arkstVersion\)=/d' "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg"
fi
for optname in "${newopts[@]}"; do
if ! grep "^${optname}=" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" >/dev/null 2>&1; then
noptname="newopt_${optname}"
echo "${optname}='${!noptname}'" >>"${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg"
fi
done
if [ -f "${INSTALL_ROOT}${CONFIGFILE}" ]; then
bash ./migrate-config.sh "${INSTALL_ROOT}${CONFIGFILE}"
bash ./migrate-main-instance.sh "${INSTALL_ROOT}${CONFIGFILE}" "${INSTALL_ROOT}${INSTANCEDIR}/main.cfg"
echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."
echo "A copy of the new configuration file was included in /etc/arkmanager. Make sure to review any changes and update your config accordingly!"
exit 2
else
mv -n "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg"
mv -n "${INSTALL_ROOT}${CONFIGFILE}.NEW" "${INSTALL_ROOT}${CONFIGFILE}.cfg"
fi
fi

View File

@ -0,0 +1,28 @@
# config environment
arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK)
# ARK server options - use ark_<optionname>=<value>
# comment out these values if you want to define them
# inside your GameUserSettings.ini file
serverMap="TheIsland" # server map (default TheIsland)
#serverMapModId="469987622" # Uncomment this to specify the Map Mod Id (<fileid> in http://steamcommunity.com/sharedfiles/filedetails/?id=<fileid>)
#ark_TotalConversionMod="496735411" # Uncomment this to specify a total-conversion mod
ark_RCONEnabled="True" # Enable RCON Protocol
ark_RCONPort="32330" # RCON Port
ark_SessionName="ARK Server Tools" # if your session name needs special characters please use the .ini instead
ark_Port="7778" # ARK server port (default 7778)
ark_QueryPort="27015" # ARK query port (default 27015)
ark_ServerPassword="" # ARK server password, empty: no password required to login
ark_ServerAdminPassword="keyboardcat" # ARK server admin password, KEEP IT SAFE!
ark_MaxPlayers="70"
#ark_GameModIds="487516323,487516324,487516325" # Uncomment to specify additional mods by Mod Id separated by commas
#ark_AltSaveDirectoryName="SotF" # Uncomment to specify a different save directory name
# ARK server flags - use arkflag_<optionname>=true
#arkflag_OnlyAdminRejoinAsSpectator=true # Uncomment to only allow admins to rejoin as spectator
#arkflag_DisableDeathSpectator=true # Uncomment to disable players from becoming spectators when they die
# ARK server options - i.e. for -optname=val, use arkopt_optname=val
#arkopt_StructureDestructionTag=DestroySwampSnowStructures

View File

@ -20,46 +20,99 @@ NAME="ShooterGameServer"
LOGFILE="${logdir}/${NAME}.log"
DAEMON="/usr/bin/arkmanager"
SVCNAME="${0##*/}"
INSTANCE="${SVCNAME#*.}"
if [ "$INSTANCE" == "$SVCNAME" ]; then
INSTANCE="$2"
fi
set -e
# If the daemon is not there, then exit.
test -x $DAEMON || exit 5
function start_instance(){
local INSTANCE="$1"
PID="$(<"/var/run/arkmanager.${INSTANCE}.pid")"
if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then
if grep " ${PID} .* ${DAEMON}" <(ps -ef) >/dev/null 2>&1; then
echo "$NAME @${INSTANCE} is already running"
return 0
fi
fi
log_daemon_msg "Starting" "$NAME @${INSTANCE}"
ulimit -n 100000
"${DAEMON}" run "@${INSTANCE}" &
PID="$!"
sleep 5
if kill -0 "$PID" >/dev/null 2>&1; then
echo "$PID" >"/var/run/arkmanager.${INSTANCE}.pid"
log_end_msg 0
return 0
else
log_end_msg 1
return 1
fi
}
function start_all_instances(){
local nosuccess=0
local anyfailure=0
for instance in $("${DAEMON}" list-instances --brief); do
if start_instance "$instance"; then
nosuccess=0
else
anyfailure=1
fi
done
return $nosuccess
}
function stop_instance(){
local INSTANCE="$1"
log_daemon_msg "Stopping $NAME @${INSTANCE}: "
"${DAEMON}" stop "@${INSTANCE}" &
rm -f "/var/run/arkmanager.${INSTANCE}.pid"
log_end_msg 0
return 0
}
case "$1" in
start)
log_daemon_msg "Starting" "$NAME"
ulimit -n 100000
su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user
sleep 5
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
echo "$PID" >/var/run/arkmanager.pid
log_end_msg 0
if [ -n "$INSTANCE" ]; then
start_instance "$INSTANCE"
exit $?
else
log_end_msg 1
if start_all_instances; then
exit 0
else
exit 1
fi
fi
;;
stop)
log_daemon_msg "Stopping" "$NAME"
su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user
sleep 5
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
log_end_msg 1
if [ -n "$INSTANCE" ]; then
stop_instance "$INSTANCE"
exit $?
else
rm /var/run/arkmanager.pid
log_end_msg 0
for instance in $("${DAEMON}" list-instances --brief); do
stop_instance "$instance"
done
exit $?
fi
;;
restart)
ulimit -n 100000
su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user
"$0" stop
"$0" start
;;
status)
su -s /bin/sh -c "$DAEMON status" $steamcmd_user
"$DAEMON" status "@${INSTANCE:-all}"
;;
*)

23
tools/migrate-config.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
configfile="$1"
newopts=( arkbackupdir arkautorestartfile install_bindir install_libexecdir install_datadir mod_appid )
newopt_steamcmd_appinfocache="${PREFIX}/Steam/appcache/appinfo.vdf"
newopt_arkbackupdir="${PREFIX}/ARK-Backups"
newopt_arkautorestartfile="ShooterGame/Saved/.autorestart"
newopt_install_bindir="${BINDIR}"
newopt_install_libexecdir="${LIBEXECDIR}"
newopt_install_datadir="${DATADIR}"
newopt_mod_appid=346110
if grep '^\(servermail\|arkstVersion\)=' "${configfile}" >/dev/null 2>&1; then
sed -i '/^\(servermail\|arkstVersion\)=/d' "${configfile}"
fi
for optname in "${newopts[@]}"; do
if ! grep "^${optname}=" "${configfile}" >/dev/null 2>&1; then
noptname="newopt_${optname}"
echo "${optname}='${!noptname}'" >>"${configfile}"
fi
done

10
tools/migrate-main-instance.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
configfile="$1"
instancefile="$2"
if grep "^arkserverroot=" <"$configfile" >/dev/null 2>&1 && [ ! -f "$instancefile" ]; then
sed -n '/^#*\(ark\(\|flag\|opt\)_[^=]*\|arkserverroot\|serverMap\(\|ModId\)\)=/p' <"$configfile" >"$instancefile"
sed -i '/^ark\(serverroot\|_\(RCONPort\|Port\|QueryPort\)\)=/d' "$configfile"
echo 'defaultinstance="main"' >>"$configfile"
fi

View File

@ -13,27 +13,25 @@ depend(){
}
start(){
INSTANCE="${RC_SVCNAME#*.}"
ebegin "Starting ARK manager daemon"
ulimit -n 100000
su -s /bin/sh -c "$DAEMON start --all" $steamcmd_user
sleep 5
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
eend 0
if [ "$INSTANCE" != "$RC_SVCNAME" ]; then
"$DAEMON" start "@${INSTANCE}"
else
eend 1
"$DAEMON" start "@all"
fi
eend $?
}
stop(){
INSTANCE="${RC_SVCNAME#*.}"
ebegin "Stopping ARK manager daemon"
su -s /bin/sh -c "$DAEMON stop --all" $steamcmd_user
sleep 5
PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; then
eend 0
if [ "$INSTANCE" != "$RC_SVCNAME" ]; then
"$DAEMON" stop "@${INSTANCE}"
else
eend 1
"$DAEMON" stop "@all"
fi
eend $?
}

View File

@ -34,54 +34,103 @@ GREEN="\\033[1;32m"
RED="\\033[1;31m"
NORMAL="\\033[0;39m"
SVCNAME="${0##*/}"
INSTANCE="${SVCNAME#*.}"
if [ "$INSTANCE" == "$SVCNAME" ]; then
INSTANCE="$2"
fi
set -e
# If the daemon is not there, then exit.
test -x $DAEMON || exit 5
function start_instance(){
local INSTANCE="$1"
PID="$(<"/var/run/arkmanager.${INSTANCE}.pid")"
if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then
if grep " ${PID} .* ${DAEMON}" <(ps -ef) >/dev/null 2>&1; then
echo "$NAME @${INSTANCE} is already running"
return 0
fi
fi
echo -n "Starting $NAME @${INSTANCE}: "
ulimit -n 100000
"${DAEMON}" run "@${INSTANCE}" &
PID="$!"
sleep 5
if kill -0 "$PID" >/dev/null 2>&1; then
echo "$PID" >"/var/run/arkmanager.${INSTANCE}.pid"
touch "/var/lock/subsys/arkmanager.${INSTANCE}"
echo "[" "$GREEN" " OK " "$NORMAL" "]"
return 0
else
echo "[" "$RED" " FAILED " "$NORMAL" "]"
return 1
fi
}
function start_all_instances(){
local nosuccess=0
local anyfailure=0
for instance in $("${DAEMON}" list-instances --brief); do
if start_instance "$instance"; then
nosuccess=0
else
anyfailure=1
fi
done
return $nosuccess
}
function stop_instance(){
local INSTANCE="$1"
echo -n "Stopping $NAME @${INSTANCE}: "
"${DAEMON}" stop "@${INSTANCE}" &
rm -f "/var/lock/subsys/arkmanager.${INSTANCE}"
rm -f "/var/run/arkmanager.${INSTANCE}.pid"
echo "[" "$GREEN" " OK " "$NORMAL" "]"
return 0
}
case "$1" in
start)
echo -n "Starting $NAME: "
ulimit -n 100000
su -s /bin/sh -c "$DAEMON start --all" $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
touch /var/lock/subsys/arkmanager
echo "[" "$GREEN" " OK " "$NORMAL" "]"
exit 0
if [ -n "$INSTANCE" ]; then
start_instance "$INSTANCE"
exit $?
else
echo "[" "$RED" " FAILED " "$NORMAL" "]"
exit 1
if start_all_instances; then
touch /var/lock/subsys/arkmanager
exit 0
else
exit 1
fi
fi
;;
stop)
echo -n "Stopping $NAME: "
su -s /bin/sh -c "$DAEMON stop --all" $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
if [ -n "$INSTANCE" ]; then
stop_instance "$INSTANCE"
exit $?
else
echo "[" "$GREEN" " OK " "$NORMAL" "]"
rm -f /var/lock/subsys/arkmanager
rm -f /var/run/arkmanager.pid
exit 0
for instance in $("${DAEMON}" list-instances --brief); do
stop_instance "$instance"
done
rm -f "/var/lock/subsys/arkmanager"
exit $?
fi
;;
restart)
echo -n "Restarting $NAME: "
ulimit -n 100000
su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user > /dev/null
echo "OK"
"$0" stop
"$0" start
;;
status)
su -s /bin/sh -c "$DAEMON status" $steamcmd_user
"$DAEMON" status "@${INSTANCE:-all}"
exit 0
;;

View File

@ -1,5 +1,14 @@
#!/bin/bash
for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do
systemctl start arkmanager@${service#configfile_}
DAEMON=/usr/bin/arkmanager
for service in $(${DAEMON} list-instances --brief); do
case "$1" in
start)
systemctl start arkmanager@${service}
;;
stop)
systemctl stop arkmanager@${service}
;;
esac
done

View File

@ -2,5 +2,6 @@
Description=Daemon to start an ark server instance
[Service]
User=steam
ExecStart=/usr/bin/arkmanager useconfig %i run
Type=simple

View File

@ -2,6 +2,8 @@ description "ARK Server Tools service"
instance $service
setuid steam
env DAEMON="/usr/bin/arkmanager"
exec "$DAEMON" useconfig $service run

View File

@ -1,8 +1,10 @@
start on runlevel [345]
stop on runlevel [!345]
env DAEMON="/usr/bin/arkmanager"
script
for service in main $(grep -o '^configfile_[^=]*' /etc/arkmanager/arkmanager.cfg); do
start arkmanager-instance service=${service#configfile_}
for service in $(${DAEMON} list-instances --brief); do
start arkmanager-instance service=${service}
done
end script