diff --git a/README.md b/README.md index f9a1662..f461b7c 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,8 @@ ark_ServerPVE=False ark_DifficultyOffset=1 ``` -Your session name may contain special characters (eg. `!![EU]!! Aw&some ARK`) which could break the startup command. -In this case you may want to comment out the `ark_SessionName` variable and define it inside your **GameUserSettings.ini** file. +Your session name may not contain special characters (eg. `!![EU]!! Aw&some ARK`) as it could break the startup command. +In this case you may want to comment out the `ark_SessionName` variable and define it inside your **GameUserSettings.ini** file instead. You can override or add variables for a specific system user creating a file called `.arkmanager.cfg` in the home directory of the system user. diff --git a/tools/arkmanager b/tools/arkmanager index 0db7ed1..c668302 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -30,7 +30,6 @@ info="" thejob="" instver="" bnumber="" -timestamp=$( date +%T ) GREEN="\\033[1;32m" RED="\\033[1;31m" YELLOW="\\e[0;33m" @@ -44,6 +43,13 @@ arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer # functions #--------------------- +# +# timestamp +# +timestamp() { + date +%T +} + # # check configuration and report errors # @@ -100,14 +106,6 @@ function checkForUpdate(){ fi } -# -# Set the new current version in a file -# -function setCurrentVersion(){ - cd "$arkserverroot" - echo $bnumber > arkversion -} - # # Check if the server need to be updated # Return 0 if update is needed, else return 1 @@ -156,6 +154,7 @@ function parseSteamACF(){ function getCurrentVersion(){ if [ -f "${arkserverroot}/steamapps/appmanifest_${appid}.acf" ]; then instver=`while read name val; do if [ "${name}" == "{" ]; then parseSteamACF "" "buildid"; break; fi; done <"${arkserverroot}/steamapps/appmanifest_${appid}.acf"` + echo $instver > "$arkserverroot/arkversion" else instver="" fi @@ -198,6 +197,38 @@ function isTheServerUp(){ fi } +# +# run function +# +doRun() { + arkserveropts=$serverMap + + # bring in ark_... options + for varname in "${!ark_@}"; do + name="${varname#ark_}" + val="${!varname}" + + # Port is actually one higher than specified + # i.e. specifying port 7777 will have the server + # use port 7778 + if [ "$name" == "Port" ]; then + (( val = val - 1 )) + fi + + if [ -n "$val" ]; then + arkserveropts="${arkserveropts}?${name}=${val}" + 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" + echo "`timestamp`: exited with status $?" +} + # # start function # @@ -208,32 +239,8 @@ doStart() { tput sc echo "The server is starting..." - arkserveropts=$serverMap - - # bring in ark_... options - for varname in "${!ark_@}"; do - name="${varname#ark_}" - val="${!varname}" - - # Port is actually one higher than specified - # i.e. specifying port 7777 will have the server - # use port 7778 - if [ "$name" == "Port" ]; then - (( val = val - 1 )) - fi - - if [ -n "$val" ]; then - arkserveropts="${arkserveropts}?${name}=${val}" - fi - done - - arkserveropts="${arkserveropts}?listen" - # run the server in background - echo "$timestamp: start" >> "$logdir/$arkserverLog" - # set max open files limit before we start the server - ulimit -n $maxOpenFiles - nohup "$arkserverroot/$arkserverexec" "$arkserveropts" "$logdir/$arkserverLog" 2>&1 & # output of this command is logged - echo "$timestamp: start" >> "$logdir/$arkmanagerLog" + doRun >"$logdir/$arkserverLog" 2>&1 & # output of this command is logged + echo "`timestamp`: start" >> "$logdir/$arkmanagerLog" tput rc; tput ed; echo "The server is now up" fi @@ -252,7 +259,7 @@ doStop() { tput rc; tput ed; echo "The server has been stopped" - echo "$timestamp: stop" >> "$logdir/$arkmanagerLog" + echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" else echo "The server is already stopped" fi @@ -268,8 +275,7 @@ doInstall() { # install the server ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit # the current version should be the last version. We set our version - getAvailableVersion - setCurrentVersion + getCurrentVersion } # @@ -282,7 +288,7 @@ doUpdate() { forceUpdate else echo "Your server is already up to date! The most recent version is ${bnumber}." - echo "$timestamp: No update needed." >> "$logdir/update.log" + echo "`timestamp`: No update needed." >> "$logdir/update.log" fi; } @@ -296,9 +302,8 @@ forceUpdate(){ cd "$steamcmdroot" ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid +quit # the current version should be the last version. We set our version - getAvailableVersion - setCurrentVersion - echo "$timestamp: update to $instver complete" >> "$logdir/update.log" + getCurrentVersion + echo "`timestamp`: update to $instver complete" >> "$logdir/update.log" # we restart the server only if it was started before the update if [ $serverWasAlive -eq 1 ]; then @@ -314,14 +319,14 @@ safeUpdate(){ if isUpdateNeeded; then while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name $serverMap.ark` ]; do - echo "$timestamp: Save file older than 1 minute. Delaying update." >> "$logdir/update.log" + echo "`timestamp`: Save file older than 1 minute. Delaying update." >> "$logdir/update.log" sleep 30s done - echo "$timestamp: Save file newer than 1 minute. Performing an update." >> "$logdir/update.log" + echo "`timestamp`: Save file newer than 1 minute. Performing an update." >> "$logdir/update.log" forceUpdate else echo "Your server is already up to date! The most recent version is ${bnumber}." - echo "$timestamp: No update needed." >> "$logdir/update.log" + echo "`timestamp`: No update needed." >> "$logdir/update.log" fi } @@ -378,11 +383,11 @@ case "$1" in ;; restart) doStop - echo "$timestamp: stop" >> "$logdir/$arkmanagerLog" + echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" sleep 10 doStart - echo "$timestamp: start" >> "$logdir/$arkmanagerLog" - echo "$timestamp: restart" >> "$logdir/$arkmanagerLog" + echo "`timestamp`: start" >> "$logdir/$arkmanagerLog" + echo "`timestamp`: restart" >> "$logdir/$arkmanagerLog" ;; install) doInstall diff --git a/tools/install.sh b/tools/install.sh index 420aba1..55d249c 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -86,7 +86,10 @@ if [ ! -z "$1" ]; then # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists mkdir -p "${INSTALL_ROOT}/etc/arkmanager" if [ -f "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" ]; then + cp -n arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" + chown "$1" "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg.NEW" 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 cp -n arkmanager.cfg "${INSTALL_ROOT}/etc/arkmanager/arkmanager.cfg" diff --git a/tools/lsb/arkdaemon b/tools/lsb/arkdaemon index ad802c3..f728ede 100755 --- a/tools/lsb/arkdaemon +++ b/tools/lsb/arkdaemon @@ -28,6 +28,7 @@ test -x $DAEMON || exit 5 case "$1" in start) log_daemon_msg "Starting" "$NAME" + ulimit -n 100000 su -s /bin/sh -c "$DAEMON start" $steamcmd_user sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` @@ -53,6 +54,7 @@ case "$1" in ;; restart) + ulimit -n 100000 su -s /bin/sh -c "$DAEMON restart" $steamcmd_user ;; diff --git a/tools/openrc/arkdaemon b/tools/openrc/arkdaemon index 7104607..d83f94c 100644 --- a/tools/openrc/arkdaemon +++ b/tools/openrc/arkdaemon @@ -14,6 +14,7 @@ depend(){ start(){ ebegin "Starting ARK manager daemon" + ulimit -n 100000 su -s /bin/sh -c "$DAEMON start" $steamcmd_user sleep 5 PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` diff --git a/tools/redhat/arkdaemon b/tools/redhat/arkdaemon index e51925c..411bcd1 100755 --- a/tools/redhat/arkdaemon +++ b/tools/redhat/arkdaemon @@ -42,6 +42,7 @@ 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}'` @@ -74,6 +75,7 @@ case "$1" in restart) echo -n "Restarting $NAME: " + ulimit -n 100000 su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null echo "OK" ;; diff --git a/tools/systemd/arkdaemon.init b/tools/systemd/arkdaemon.init index 6faa93e..2cde2ab 100755 --- a/tools/systemd/arkdaemon.init +++ b/tools/systemd/arkdaemon.init @@ -39,6 +39,7 @@ 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}'` @@ -69,6 +70,7 @@ case "$1" in restart) echo -n "Restarting $NAME: " + ulimit -n 100000 su -s /bin/sh -c "$DAEMON restart" $steamcmd_user > /dev/null echo "OK" ;;