diff --git a/tools/arkmanager b/tools/arkmanager index 4151663..f126580 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -835,6 +835,22 @@ doUpdate() { fi done + echo "$$" >"${arkserverroot}/.ark-update.lock.$$" + while true; do + if ! ln "${arkserverroot}/.ark-update.lock.$$" "${arkserverroot}/.ark-update.lock"; then + local lockpid="$(<"${arkserverroot}/.ark-update.lock")" + if [ -n "$lockpid" ] && [ "$lockpid" != "$$" ] && kill -0 "$lockpid"; then + echo "Update already in progress (PID: $lockpid)" + rm -f "${arkserverroot}/.ark-update.lock.$$" + return 1 + fi + rm -f "${arkserverroot}/.ark-update.lock" + else + break + fi + done + rm -f "${arkserverroot}/.ark-update.lock.$$" + if [ -n "$modupdate" ]; then if ! doDownloadAllMods; then modupdate= @@ -978,6 +994,8 @@ doUpdate() { echo "Your server is already up to date! The most recent version is ${bnumber}." echo "`timestamp`: No update needed." >> "$logdir/update.log" fi; + + rm -f "${arkserverroot}/.ark-update.lock" } # diff --git a/tools/install.sh b/tools/install.sh index f89b155..3c3fbbc 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -218,7 +218,7 @@ else 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}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service @@ -245,7 +245,7 @@ else 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}/|" "${INSTALL_ROOT}/etc/systemd/system/arkmanager@.service" if [ -z "${INSTALL_ROOT}" ]; then systemctl daemon-reload systemctl enable arkmanager.service