diff --git a/tools/arkmanager b/tools/arkmanager index df92d7d..f4b1d56 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -303,6 +303,8 @@ doRun() { arkserveropts="-MapModID=$serverMapModId" fi + arkextraopts=( ) + # bring in ark_... options for varname in "${!ark_@}"; do name="${varname#ark_}" @@ -320,12 +322,23 @@ doRun() { fi done + # bring in arkflag_... flags + for varname in "${!arkflag_@}"; do + name="${varname#arkflag_}" + val="${!varname}" + + if [ -n "$val" ]; then + arkextraopts=( "${arkextraopts[@]}" "-${name}" ) + fi + done + + arkserveropts="${arkserveropts}?listen" # run the server in background echo "`timestamp`: start" # set max open files limit before we start the server ulimit -n $maxOpenFiles - "$arkserverroot/$arkserverexec" "$arkserveropts" + "$arkserverroot/$arkserverexec" "$arkserveropts" "${arkextraopts[@]}" echo "`timestamp`: exited with status $?" } @@ -346,6 +359,21 @@ doStart() { fi } +# +# starts all servers specified by configfile_xxxxx in config file +# +doStartAll(){ + doStart + for cfg in "${!configfile_@}"; do + if [ -f "${!cfg}" ]; then + ( + source "${!cfg}" + doStart + ) + fi + done +} + # # stop the ARK server # @@ -379,6 +407,21 @@ doStop() { fi } +# +# stops all servers specified by configfile_xxxxx in config file +# +doStopAll(){ + doStop + for cfg in "${!configfile_@}"; do + if [ -f "${!cfg}" ]; then + ( + source "${!cfg}" + doStop + ) + fi + done +} + # # install of ARK server # @@ -609,6 +652,7 @@ doWarnUpdate(){ doBackup(){ local datestamp=`date +"%Y-%m-%d_%H.%M.%S"` local backupdir="${arkbackupdir}/${datestamp}" + local savedir="SavedArks" mkdir -p "$backupdir" # extract the map name from the active map mod @@ -625,17 +669,22 @@ doBackup(){ ' <"${arkserverroot}/ShooterGame/Content/Mods/${serverMapModId}/mod.info")" fi + # Get save directory name + if [ -n "${ark_AltSaveDirectoryName}" ]; then + savedir="${ark_AltSaveDirectoryName}" + fi + # ARK server uses Write-Unlink-Rename echo -ne "${NORMAL} Copying ARK world file " - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/${savedir}/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" if [ ! -f "${backupdir}/${serverMap##*/}.ark" ]; then sleep 2 - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/${savedir}/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" fi # If both attempts fail, server may have # crashed between unlink and rename if [ ! -f "${backupdir}/${serverMap##*/}.ark" ]; then - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.tmp" "${backupdir##*/}/${serverMap##*/}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/${savedir}/${serverMap##*/}.tmp" "${backupdir##*/}/${serverMap##*/}.ark" fi if [ -f "${backupdir}/${serverMap##*/}.ark" ]; then echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" @@ -648,7 +697,7 @@ doBackup(){ # ARK server uses a non-blocking lock and will # fail to update the file if the lock fails. echo -e "${NORMAL} Copying ARK profile files" - for f in "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arkprofile; do + for f in "${arkserverroot}/ShooterGame/Saved/${savedir}/"*.arkprofile; do echo -ne "${NORMAL} ${f##*/} " cp -p "${f}" "${backupdir}/${f##*/}" if [ ! -s "${backupdir}/${f##*/}" ]; then @@ -669,7 +718,7 @@ doBackup(){ # ARK server uses Lock-Truncate-Write-Unlock echo -e "${NORMAL} Copying ARK tribe files " - for f in "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arktribe; do + for f in "${arkserverroot}/ShooterGame/Saved/${savedir}/"*.arktribe; do echo -ne "${NORMAL} ${f##*/} " cp -p "${f}" "${backupdir}/${f##*/}" if [ ! -s "${backupdir}/${f##*/}" ]; then @@ -784,16 +833,35 @@ checkConfig while true; do case "$1" in start) - doStart + if [ "$2" == "--all" ]; then + doStartAll + shift + else + doStart + fi ;; stop) - doStop + if [ "$2" == "--all" ]; then + doStopAll + shift + else + doStop + fi ;; restart) - doStop + if [ "$2" == "--all" ]; then + doStopAll + else + doStop + fi echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" sleep 1 - doStart + if [ "$2" == "--all" ]; then + doStartAll + shift + else + doStart + fi echo "`timestamp`: start" >> "$logdir/$arkmanagerLog" echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog" ;; @@ -855,8 +923,11 @@ while true; do echo "checkupdate Check for a new ARK server version" echo "install Install the ARK server files from steamcmd" echo "restart Stops the server and then starts it" + echo "restart --all Restarts all servers specified in configfile_xxxxx" echo "start Starts the server" + echo "start --all Starts all servers specified in configfile_xxxxx" echo "stop Stops the server" + echo "stop --all Stops all servers specified in configfile_xxxxx" echo "status Returns the status of the current ARK server instance" echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" echo "update --force Apply update without check the current version" diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 6d55038..bb0c45c 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -22,6 +22,7 @@ msgWarnUpdateSeconds="This ARK server will shutdown for an update in %d seconds" # inside your GameUserSettings.ini file serverMap="TheIsland" # server map (default TheIsland) #serverMapModId="469987622" # Uncomment this to specify the Map Mod Id ( in http://steamcommunity.com/sharedfiles/filedetails/?id=) +#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 @@ -31,6 +32,11 @@ ark_ServerPassword="" # ARK server 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_=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 # config Service servicename="arkserv" # Name of the service (don't change if you don't know what are you doing) @@ -42,4 +48,4 @@ mod_appid=346110 # App ID for # alternate configs # example for config name "ark1": -#config_ark1="/path/to/config/file" +#configfile_ark1="/path/to/config/file" diff --git a/tools/lsb/arkdaemon b/tools/lsb/arkdaemon index f728ede..484d5d8 100755 --- a/tools/lsb/arkdaemon +++ b/tools/lsb/arkdaemon @@ -29,7 +29,7 @@ case "$1" in start) log_daemon_msg "Starting" "$NAME" ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + 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 @@ -42,7 +42,7 @@ case "$1" in stop) log_daemon_msg "Stopping" "$NAME" - su -s /bin/sh -c "$DAEMON stop" $steamcmd_user + 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 @@ -55,7 +55,7 @@ case "$1" in restart) ulimit -n 100000 - su -s /bin/sh -c "$DAEMON restart" $steamcmd_user + su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user ;; status) diff --git a/tools/openrc/arkdaemon b/tools/openrc/arkdaemon index 4c2ddd0..5aa9340 100644 --- a/tools/openrc/arkdaemon +++ b/tools/openrc/arkdaemon @@ -15,7 +15,7 @@ depend(){ start(){ ebegin "Starting ARK manager daemon" ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + 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 @@ -27,7 +27,7 @@ start(){ stop(){ ebegin "Stopping ARK manager daemon" - su -s /bin/sh -c "$DAEMON start" $steamcmd_user + 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 diff --git a/tools/redhat/arkdaemon b/tools/redhat/arkdaemon index 411bcd1..fa0ed1a 100755 --- a/tools/redhat/arkdaemon +++ b/tools/redhat/arkdaemon @@ -43,7 +43,7 @@ case "$1" in start) echo -n "Starting $NAME: " ulimit -n 100000 - su -s /bin/sh -c "$DAEMON start" $steamcmd_user > /dev/null + 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 @@ -59,7 +59,7 @@ case "$1" in stop) echo -n "Stopping $NAME: " - su -s /bin/sh -c "$DAEMON stop" $steamcmd_user > /dev/null + 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 @@ -76,7 +76,7 @@ case "$1" in restart) echo -n "Restarting $NAME: " ulimit -n 100000 - su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null + su -s /bin/sh -c "$DAEMON restart --all" $steamcmd_user > /dev/null echo "OK" ;; diff --git a/tools/systemd/arkdeamon.service b/tools/systemd/arkdeamon.service index d1fb5da..a92f7ed 100644 --- a/tools/systemd/arkdeamon.service +++ b/tools/systemd/arkdeamon.service @@ -3,8 +3,8 @@ Description=Daemon to start ark server After=network.target [Service] -ExecStart=/usr/libexec/arkmanager/arkmanager.init start -ExecStop=/usr/libexec/arkmanager/arkmanager.init stop +ExecStart=/usr/libexec/arkmanager/arkmanager.init start --all +ExecStop=/usr/libexec/arkmanager/arkmanager.init stop --all Type=forking PIDFile=/var/run/arkmanager.pid