diff --git a/lgsm/modules/check_last_update.sh b/lgsm/modules/check_last_update.sh index d4f2d8f899..4e017567dd 100644 --- a/lgsm/modules/check_last_update.sh +++ b/lgsm/modules/check_last_update.sh @@ -3,13 +3,13 @@ # Author: Daniel Gibbs # Contributors: http://linuxgsm.com/contrib # Website: https://linuxgsm.com -# Description: Checks lock file to see when last update happened. +# Description: Checks Lockfile to see when last update happened. # Will reboot server if instance not rebooted since update. moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" -if [ -f "${lockdir}/${selfname}-laststart.lock" ]; then - laststart=$(cat "${lockdir}/${selfname}-laststart.lock") +if [ -f "${lockdir}/${selfname}-last-started.lock" ]; then + laststart=$(cat "${lockdir}/${selfname}-last-started.lock") fi if [ -f "${lockdir}/lastupdate.lock" ]; then lastupdate=$(cat "${lockdir}/lastupdate.lock") @@ -17,7 +17,7 @@ fi check_status.sh if [ -f "${lockdir}/lastupdate.lock" ] && [ "${status}" != "0" ]; then - if [ ! -f "${lockdir}/${selfname}-laststart.lock" ] || [ "${laststart}" -lt "${lastupdate}" ]; then + if [ ! -f "${lockdir}/${selfname}-last-started.lock" ] || [ "${laststart}" -lt "${lastupdate}" ]; then fn_print_info "${selfname} has not been restarted since last update" fn_script_log_info "${selfname} has not been restarted since last update" command_restart.sh diff --git a/lgsm/modules/command_backup.sh b/lgsm/modules/command_backup.sh index 1973eb95fc..5aa13f99b8 100644 --- a/lgsm/modules/command_backup.sh +++ b/lgsm/modules/command_backup.sh @@ -22,7 +22,7 @@ fn_backup_trap() { echo -en "backup ${backupname}.tar.gz..." fn_print_removed_eol_nl fn_script_log_info "Backup ${backupname}.tar.gz: REMOVED" - # Remove lock file. + # Remove backup lockfile. rm -f "${lockdir:?}/backup.lock" fn_backup_start_server unset exitbypass @@ -31,9 +31,21 @@ fn_backup_trap() { # Check if a backup is pending or has been aborted using backup.lock. fn_backup_check_lockfile() { + # Remove stale lockfile. if [ -f "${lockdir}/backup.lock" ]; then - fn_print_info_nl "Lock file found: Backup is currently running" - fn_script_log_error "Lock file found: Backup is currently running: ${lockdir}/backup.lock" + if [ "$(find "${lockdir}/backup.lock" -mmin +60)" ]; then + fn_print_dots "Lockfile found: " + fn_print_checking_eol + fn_print_warn "Lockfile found: Removing stale lockfile: " + fn_print_warn_eol + fn_script_log_warn "Lockfile found: Removing stale lockfile" + rm -f "${lockdir:?}/backup.lock" + fi + fi + + if [ -f "${lockdir}/backup.lock" ]; then + fn_print_info_nl "Lockfile found: Backup is currently running" + fn_script_log_error "Lockfile found: Backup is currently running: ${lockdir}/backup.lock" core_exit.sh fi } @@ -118,7 +130,7 @@ fn_backup_migrate_olddir() { fn_backup_create_lockfile() { # Create lockfile. date '+%s' > "${lockdir}/backup.lock" - fn_script_log_info "Lockfile generated" + fn_script_log_info "Backup lockfile generated" fn_script_log_info "${lockdir}/backup.lock" # trap to remove lockfile on quit. trap fn_backup_trap INT @@ -140,7 +152,7 @@ fn_backup_compression() { core_exit.sh fi - tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}/backup.lock" ./. + tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" ./. local exitcode=$? if [ "${exitcode}" != 0 ]; then fn_print_fail_eol @@ -153,8 +165,6 @@ fn_backup_compression() { fn_print_ok_nl "Completed: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')" fn_script_log_pass "Backup created: ${backupname}.tar.gz, total size $(du -sh "${backupdir}/${backupname}.tar.gz" | awk '{print $1}')" fi - # Remove lock file - rm -f "${lockdir:?}/backup.lock" } # Clear old backups according to maxbackups and maxbackupdays variables. @@ -265,4 +275,6 @@ fn_backup_compression fn_backup_prune fn_backup_start_server +# Remove backup lockfile. +rm -f "${lockdir:?}/backup.lock" core_exit.sh diff --git a/lgsm/modules/command_debug.sh b/lgsm/modules/command_debug.sh index fb3b9c99ec..00f965161d 100644 --- a/lgsm/modules/command_debug.sh +++ b/lgsm/modules/command_debug.sh @@ -13,7 +13,7 @@ fn_firstcommand_set # Trap to remove lockfile on quit. fn_lockfile_trap() { # Remove lockfile. - rm -f "${lockdir:?}/${selfname}-start.lock" + rm -f "${lockdir:?}/${selfname}-started.lock" # resets terminal. Servers can sometimes mess up the terminal on exit. reset fn_print_dots "Stopping debug" @@ -99,11 +99,11 @@ fn_script_log_info "Starting debug" fn_print_ok_nl "Starting debug" # Create lockfile. -date '+%s' > "${lockdir}/${selfname}-start.lock" -echo "${version}" >> "${lockdir}/${selfname}-start.lock" -echo "${port}" >> "${lockdir}/${selfname}-start.lock" +date '+%s' > "${lockdir}/${selfname}-started.lock" +echo "${version}" >> "${lockdir}/${selfname}-started.lock" +echo "${port}" >> "${lockdir}/${selfname}-started.lock" fn_script_log_info "Lockfile generated" -fn_script_log_info "${lockdir}/${selfname}-start.lock" +fn_script_log_info "${lockdir}/${selfname}-started.lock" if [ "${shortname}" == "av" ]; then cd "${systemdir}" || exit diff --git a/lgsm/modules/command_monitor.sh b/lgsm/modules/command_monitor.sh index 6e688b3fb6..b93d1554cc 100644 --- a/lgsm/modules/command_monitor.sh +++ b/lgsm/modules/command_monitor.sh @@ -13,7 +13,7 @@ fn_firstcommand_set fn_monitor_check_lockfile() { # Monitor does not run if lockfile is not found. - if [ ! -f "${lockdir}/${selfname}-start.lock" ]; then + if [ ! -f "${lockdir}/${selfname}-started.lock" ]; then fn_print_dots "Checking lockfile: " fn_print_checking_eol fn_script_log_info "Checking lockfile: CHECKING" @@ -25,10 +25,10 @@ fn_monitor_check_lockfile() { fi # Fix if lockfile is not unix time or contains letters - if [ -f "${lockdir}/${selfname}-start.lock" ] && [[ "$(head -n 1 "${lockdir}/${selfname}-start.lock")" =~ [A-Za-z] ]]; then - date '+%s' > "${lockdir}/${selfname}-start.lock" - echo "${version}" >> "${lockdir}/${selfname}-start.lock" - echo "${port}" >> "${lockdir}/${selfname}-start.lock" + if [ -f "${lockdir}/${selfname}-started.lock" ] && [[ "$(head -n 1 "${lockdir}/${selfname}-started.lock")" =~ [A-Za-z] ]]; then + date '+%s' > "${lockdir}/${selfname}-started.lock" + echo "${version}" >> "${lockdir}/${selfname}-started.lock" + echo "${port}" >> "${lockdir}/${selfname}-started.lock" fi } @@ -93,12 +93,12 @@ fn_monitor_check_stopping(){ fi fi - if [ -f "${lockdir}/stoping.lock" ] && [[ "$(pgrep -fc -u "${USER}" "${selfname} stop")" != "0" || "$(pgrep -fc -u "${USER}" "${selfname} s")" != "0" ]]; then + if [ -f "${lockdir}/stopping.lock" ] && [[ "$(pgrep -fc -u "${USER}" "${selfname} stop")" != "0" || "$(pgrep -fc -u "${USER}" "${selfname} s")" != "0" ]]; then fn_print_dots "Checking stop: " fn_print_checking_eol - fn_print_info "Checking stop: LinuxGSM is currently stoping: " + fn_print_info "Checking stop: LinuxGSM is currently stopping: " fn_print_info_eol - fn_script_log_info "Checking backup: LinuxGSM is currently stoping" + fn_script_log_info "Checking backup: LinuxGSM is currently stopping" core_exit.sh fi } @@ -229,12 +229,12 @@ fn_monitor_query() { fn_print_querying_eol fn_script_log_info "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : QUERYING" # querydelay - if [ "$(head -n 1 "${lockdir}/${selfname}-start.lock")" -gt "$(date "+%s" -d "${querydelay} mins ago")" ]; then + if [ "$(head -n 1 "${lockdir}/${selfname}-started.lock")" -gt "$(date "+%s" -d "${querydelay} mins ago")" ]; then fn_print_ok "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " fn_print_delay_eol_nl fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt} : DELAY" fn_script_log_info "Query bypassed: ${gameservername} started less than ${querydelay} minutes ago" - fn_script_log_info "Server started: $(date -d @$(head -n 1 "${lockdir}/${selfname}-start.lock"))" + fn_script_log_info "Server started: $(date -d @$(head -n 1 "${lockdir}/${selfname}-started.lock"))" fn_script_log_info "Current time: $(date)" monitorpass=1 core_exit.sh diff --git a/lgsm/modules/command_start.sh b/lgsm/modules/command_start.sh index 7713ee99aa..81b4df3f8f 100644 --- a/lgsm/modules/command_start.sh +++ b/lgsm/modules/command_start.sh @@ -43,11 +43,14 @@ fn_start_tmux() { mv "${consolelog}" "${consolelogdate}" fi + # Create a starting lockfile that only exists while the start command is running. date '+%s' > "${lockdir}/${selfname}-starting.lock" + # Create start lockfile that exists only when the server is running. - date '+%s' > "${lockdir}/${selfname}-start.lock" - echo "${version}" >> "${lockdir}/${selfname}-start.lock" - echo "${port}" >> "${lockdir}/${selfname}-start.lock" + date '+%s' > "${lockdir}/${selfname}-started.lock" + echo "${version}" >> "${lockdir}/${selfname}-started.lock" + echo "${port}" >> "${lockdir}/${selfname}-started.lock" + fn_reload_startparameters # Create uid to ensure unique tmux socket name. @@ -71,8 +74,9 @@ fn_start_tmux() { # Create logfile. touch "${consolelog}" - # Create last start lock file - date +%s > "${lockdir}/${selfname}-laststart.lock" + # Create last started Lockfile. + # TODO: should this be since last successful update? + date +%s > "${lockdir}/${selfname}-last-started.lock" # tmux compiled from source will return "master", therefore ignore it. if [ "${tmuxv}" == "master" ]; then @@ -162,6 +166,7 @@ fn_start_tmux() { fi fi fi + # Remove starting lockfile when command ends. rm -f "${lockdir:?}/${selfname}-starting.lock" core_exit.sh else @@ -175,12 +180,13 @@ fn_start_tmux() { check.sh # If the server already started dont start again. -# $status comes from check_status.sh, which is run by check.sh for the command. if [ "${status}" != "0" ]; then fn_print_dots "${servername}" fn_print_info_nl "${servername} is already running" fn_script_log_error "${servername} is already running" if [ -z "${exitbypass}" ]; then + # Remove starting lockfile when command ends. + rm -f "${lockdir:?}/${selfname}-starting.lock" core_exit.sh fi fi @@ -204,5 +210,6 @@ else fn_start_tmux fi +# Remove starting lockfile when command ends. rm -f "${lockdir:?}/${selfname}-starting.lock" core_exit.sh diff --git a/lgsm/modules/command_stop.sh b/lgsm/modules/command_stop.sh index a6910902f4..28840ef843 100644 --- a/lgsm/modules/command_stop.sh +++ b/lgsm/modules/command_stop.sh @@ -269,14 +269,20 @@ fn_stop_pre_check() { } check.sh + +# Create a stopping lockfile that only exists while the stop command is running. +date '+%s' > "${lockdir}/${selfname}-stopping.lock" + fn_print_dots "${servername}" info_game.sh fn_stop_pre_check -# Remove lockfile. -if [ -f "${lockdir}/${selfname}-start.lock" ]; then - rm -f "${lockdir:?}/${selfname}-start.lock" -fi + +# Remove started lockfile. +rm -f "${lockdir:?}/${selfname}-started.lock" + +# Remove stopping lockfile. +rm -f "${lockdir:?}/${selfname}-stopping.lock" if [ -z "${exitbypass}" ]; then core_exit.sh diff --git a/lgsm/modules/command_update.sh b/lgsm/modules/command_update.sh index 16e4fc8fef..3fda040f06 100644 --- a/lgsm/modules/command_update.sh +++ b/lgsm/modules/command_update.sh @@ -37,7 +37,7 @@ else update_steamcmd.sh fi -# remove update lockfile +# remove update lockfile. rm -f "${lockdir:?}/${selfname}-update.lock" core_exit.sh