mirror of
https://github.com/eliasstepanik/ark-ac-server-tools.git
synced 2026-01-12 02:48:27 +00:00
commit
46f8c16828
836
tools/arkmanager
836
tools/arkmanager
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
28
tools/instance.cfg.example
Normal file
28
tools/instance.cfg.example
Normal 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
|
||||
|
||||
|
||||
@ -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
23
tools/migrate-config.sh
Executable 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
10
tools/migrate-main-instance.sh
Executable 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
|
||||
@ -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 $?
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
;;
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -2,5 +2,6 @@
|
||||
Description=Daemon to start an ark server instance
|
||||
|
||||
[Service]
|
||||
User=steam
|
||||
ExecStart=/usr/bin/arkmanager useconfig %i run
|
||||
Type=simple
|
||||
|
||||
@ -2,6 +2,8 @@ description "ARK Server Tools service"
|
||||
|
||||
instance $service
|
||||
|
||||
setuid steam
|
||||
|
||||
env DAEMON="/usr/bin/arkmanager"
|
||||
|
||||
exec "$DAEMON" useconfig $service run
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user