[GH-ISSUE #3676] [FEATURE] Immediately update server when nobody is connected #2439

Open
opened 2026-02-27 03:02:57 +03:00 by kerem · 3 comments
Owner

Originally created by @hapklaar on GitHub (Nov 10, 2021).
Original GitHub issue: https://github.com/GameServerManagers/LinuxGSM/issues/3676

I run a Valheim server with LGSM. Using crontab I schedule the 'vhserver update' command every 24 hours at 0400. If an update is found, it will force update the server at that time.

This is far from ideal, as updates can take up to 24 hours to be applied this way.

  • I would very much like a feature where the server is immediately updated after an update is found, but only if the server is empty.
  • It would also be useful to be able to message connected users that an update has been found and the server needs to be empty to apply the update immediately.
Originally created by @hapklaar on GitHub (Nov 10, 2021). Original GitHub issue: https://github.com/GameServerManagers/LinuxGSM/issues/3676 I run a Valheim server with LGSM. Using crontab I schedule the 'vhserver update' command every 24 hours at 0400. If an update is found, it will force update the server at that time. This is far from ideal, as updates can take up to 24 hours to be applied this way. - I would very much like a feature where the server is immediately updated after an update is found, but only if the server is empty. - It would also be useful to be able to message connected users that an update has been found and the server needs to be empty to apply the update immediately.
Author
Owner

@JimTR commented on GitHub (Nov 19, 2021):

not too difficult to do
you need to create a script that looks for the string that intimates the server needs updating from the server log
source games add this to the log "Your server needs to be restarted in order to receive the latest update."
example
$update = cat <serverlog> |grep "Your server needs to be restarted in order to receive the latest update."
if $update is not empty you need to update so therefore run the script to stop the server, then the script to update the server followed by some code to rename/delete the log (else you end up in a loop, can not remember if lgsm renames/deletes the log on restart) then a script to restart the server. I am no good at bash but there is an example written in PHP which does this but be aware as this was written for a different project some of the code does not pertain to LGSM but could be adapted or converted to bash. The referenced code has been running for a couple of years now (in one form or another) and to be fair normally updates the server within a couple of mins of a server update. If you edit/adapt this code and run it as a cron job I guess you will be sorted #
don't forget to add the script as a cron running every x mins

<!-- gh-comment-id:974269455 --> @JimTR commented on GitHub (Nov 19, 2021): not too difficult to do you need to create a script that looks for the string that intimates the server needs updating from the server log source games add this to the log "Your server needs to be restarted in order to receive the latest update." example `$update = cat <serverlog> |grep "Your server needs to be restarted in order to receive the latest update."` if $update is not empty you need to update so therefore run the script to stop the server, then the script to update the server followed by some code to rename/delete the log (else you end up in a loop, can not remember if lgsm renames/deletes the log on restart) then a script to restart the server. I am no good at bash but there is an example written in PHP which does [this](https://github.com/JimTR/PHPgsm/blob/master/cron/cron_scan.php) but be aware as this was written for a different project some of the code does not pertain to LGSM but could be adapted or converted to bash. The referenced code has been running for a couple of years now (in one form or another) and to be fair normally updates the server within a couple of mins of a server update. If you edit/adapt this code and run it as a cron job I guess you will be sorted # don't forget to add the script as a cron running every x mins
Author
Owner

@hapklaar commented on GitHub (Nov 19, 2021):

The cmd to check if an update is available and update when true is already there, but the problem is both methods will shutdown the server and update, whether it is empty or not. I only want it updated immediately when nobody is connected, to prevent players from being thrown of the server without warning.

<!-- gh-comment-id:974422785 --> @hapklaar commented on GitHub (Nov 19, 2021): The cmd to check if an update is available and update when true is already there, but the problem is both methods will shutdown the server and update, whether it is empty or not. I only want it updated immediately when nobody is connected, to prevent players from being thrown of the server without warning.
Author
Owner

@JimTR commented on GitHub (Nov 20, 2021):

If you read the code I use the xpaw lib to check if the server has visitors or not perhaps look at this code instead which may be clearer here, so if you have php on your server I could adapt the code to suit your needs

<!-- gh-comment-id:974607996 --> @JimTR commented on GitHub (Nov 20, 2021): If you read the code I use the xpaw lib to check if the server has visitors or not perhaps look at this code instead which may be clearer [here](https://github.com/JimTR/PHPgsm/blob/master/cron/cron_r.php), so if you have php on your server I could adapt the code to suit your needs
Sign in to join this conversation.
No labels
Atomic
Epic
cannot reproduce
command: backup
command: console
command: debug
command: details
command: fast-dl
command: install
command: mods
command: monitor
command: post-details
command: restart
command: send
command: start
command: stop
command: update
command: update-lgsm
command: validate
command: wipe
distro: AlmaLinux
distro: Arch Linux
distro: CentOS
distro: Debian
distro: Fedora
distro: RedHat
distro: Rocky Linux
distro: Ubuntu
distro: openSUSE
engine: goldsrc
engine: source
game: 7 Days to Die
game: ARMA 3
game: Ark: Survival Evolved
game: Assetto Corsa
game: Avorion
game: BATTALION: Legacy
game: Barotrauma
game: Battalion 1944
game: Battlefield 1942
game: Black Mesa: Deathmatch
game: Blade Symphony
game: Call of Duty 2
game: Call of Duty 4
game: Call of Duty: United Offensive
game: Counter-Strike 1.6
game: Counter-Strike 2
game: Counter-Strike: Global Offensive
game: Counter-Strike: Source
game: Day of Infamy
game: Dayz
game: Death Match Classic
game: Don't Starve Together
game: ET: Legacy
game: Eco
game: Factorio
game: Factorio
game: Garry's Mod
game: Half-Life
game: Hurtword
game: Insurgecy
game: Insurgecy
game: Insurgency: Sandstorm
game: Just Cause 3
game: Killing Floor
game: Killing Floor 2
game: Left 4 Dead 2
game: Minecraft
game: Minecraft Bedrock
game: Mordhau
game: Multi Theft Auto
game: Mumble
game: Natural Selection 2
game: No More Room in Hell
game: Pavlov VR
game: Post Scriptum
game: Project Zomboid
game: Quake 3
game: QuakeWorld
game: Red Orchestra: Ostfront 41-45
game: Return to Castle Wolfenstein
game: Rising World
game: Rust
game: San Andreas Multiplayer
game: Satisfactory
game: Soldat
game: Soldier of Fortune 2
game: Squad
game: Squad 44
game: Starbound
game: Stationeers
game: Sven Co-op
game: Team Fortress 2
game: Teamspeak 3
game: Teeworlds
game: Terraria
game: The Front
game: Unreal Tournament 2004
game: Unreal Tournament 3
game: Unreal Tournament 99
game: Unturned
game: Valheim
game: Wurm Unlimited
game: Zombie Master Reborn
game: label missing
good first issue
help wanted
info: alerts
info: dependency
info: docker
info: docs
info: email
info: query
info: steamcmd
info: systemd
info: tmux
info: website
info: website
needs more info
outcome: duplicate
outcome: issue resolved
outcome: issue resolved
outcome: issue unresolved
outcome: pr accepted
outcome: pr rejected
outcome: unconfirmed
outcome: wontfix
outcome: wrong forum
potential-duplicate
priority
pull-request
type: bug
type: feature
type: feature
type: feature request
type: game server request
type: refactor
waiting response
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/LinuxGSM#2439
No description provided.