Update feature : Online players check
Hi,
I would like to see a feature that checks for online players on the server before it starts the update. If there are players online. We can have a choice of letting them know it will be updated in 5 mins or so. Or just abort the update and recheck later.
I think this will be really nice to have.
This is not really a issue more like a feature request. Thanks.
I agree that would be a nice idea. Should be possible however Im not sure how to implement this yet.
http://steamcommunity.com/groups/linuxgsm/discussions/0/364039531228165077/
Quotation from myself : "This would require to query the server and get the amount of players on it. I's an interesting idea but would be quite hard to do."
@UltimateByte @dgibbs64 Yes. Querying a server from a script is not the easiest thing to do I guess. Anyway... I can experiment a little. By creating something that will run your update script, when the server is empty.. if I even are able to do that at all..
Anyway I hope it will be implemented if you have time or can ofc :)
Thanks.
Once again, Cedar has a clever idea about this : using "stats" command.
4:20 - CedarLUG: How to get # of players in (half life) game [referencing the github discussion[: 4:21 - CedarLUG: length=$(wc -l log/console/fof-server-console.log | awk '{print $1}') 4:21 - CedarLUG: tmux send-keys -t fof-server C-a C-k status Enter 4:21 - CedarLUG: tail -n+${length} log/console/fof-server-console.log | grep player | grep humans | tail -1 | awk -F"humans" '{print $1}' | cut -d: -f2 4:21 - CedarLUG: Probably a better way, but that's my first pass. 4:22 - CedarLUG: Works for CSGO, TF2, Fistful of Frags, etc. 4:28 - CedarLUG: the length captures the current size of the log file. 4:28 - CedarLUG: The tmux command issues C-a first (to set the cursor at the front of the line) 4:28 - CedarLUG: Then C-k to kill to the end of the line 4:29 - CedarLUG: (In case there's cruft on the line as described once by jballou) 4:29 - CedarLUG: Then issues "status" 4:29 - CedarLUG: That dumps to the console log, so the next part pulls the number of humans on the server. 4:30 - CedarLUG: The "tail -n+${length}" grabs only the log content that's "grown" since the length was set. 4:30 - CedarLUG: That's so that you don't parse the whole big file. 4:30 - CedarLUG: But there is a chance that another status was issued, so take the last one (tail -1) 4:31 - CedarLUG: parse it for player (not needed, but I had it in there) 4:31 - CedarLUG: and then cut the part of the line before "human" but after "players :" 4:31 - CedarLUG: That's the number of players currently tapped in. 4:31 - CedarLUG: Ez.
I use SteamCondenser in my stuff, but for a basic rcon implementation (in Node.js but easy to read), see https://github.com/randunel/node-srcds-rcon - we may want to create a function for rcon commands and use that to send and receive data to game instances. Using command stuffing and log scraping seems like a hacky approach. If I have some time (ha ha), I might try to add something like this.
Also, there is this. I am using it to add these features to my forked gsquery.py: https://github.com/Dasister/Source-Query-Class-Python/blob/master/QueryClass.py
Node-Gamedig is now supported. This feature should now be possible
#647 related
Monitor has had a refactor and gamedig is better supported. This feature can now be developed for any game server that supports gamedig. However, will have to check results with bots
gamedig support is much better in linuxgsm now. I will finally be looking to implement this functionality.
gamedig support is much better in linuxgsm now. I will finally be looking to implement this functionality.
Oh wow! That would be awesome! Totally forgot about this... Been using LinuxGSM for years.. So this would be great! Thanks!
Oh wow! That would be awesome! Totally forgot about this... Been using LinuxGSM for years.. So this would be great! Thanks! Yeah I forgot about this and I have been developing LinuxGSM for years 😄
So I am looking at this issue and so far I have gone with if players on the server then the server will not stop. This will cover all eventualities of stopping the server when a command is run. However the only issue is that an admin might WANT the server to stop even if players are still on the server. I am unsure how best to handle that
I think the most important thing is not to change the current default of stopping / restarting / updating the server even when players are connected to avoid breaking current setups.
So a new setting to choose whether to "force" / "wait for no players online" is probably needed. The default being to force stopping the server.
If an admin sets this to "wait for no players online" in the config, LinuxGSM users should be promoted when players are online to make sure they want to stop the server anyway. This behaviour should be overridable by adding an argument like ./gameserver restart force for automation.
This way, admins who want this functionality will also see any hints from the _default.cfg notifying them of breaking cronjobs if they decide to enable the feature.
Also it might be helpful to send alerts when stopping the server is delayed because of online players.
link #3676
there will be a new var stoponlyifnoplayers="off" for admins to enable if they want.
I have just added some other functionality that if the server is blocked from restarting it will create a restart-request.lock file. When monitor is run it will check for this file and trigger a restart (if no players). This is useful if there is a daily restart cron that happens to run while players are on the server. It will ensure that the server will eventually be restarted.
Update will also only happen if no players are present. I expect as updates are released players will naturally drop off allowing the server to update itself without disturbing a running game.
I think adding force-restart and force-stop will also be needed.
Unsure on how to handle alerts currently but will give it some thought.
Sounds good!
I expect as updates are released players will naturally drop off allowing the server to update itself without disturbing a running game.
Perhaps this can also be achieved by adding a maxstopdelay var to the config, forcing the server to restart, stop or update after the desired period of time.
So there a a few scenarios to this
- stop command will not stop the server if players are on the server
- restart command will postpone a restart of the server if players on the server (lock file is created). Monitor will check for an empty server and then force a restart.
- update command will not update if players are on the server (lock file is created). Monitor will check for an empty server and then force an update.
Edit: add timeout setting to force restart after X mintues
Tanks for your effort! @dgibbs64
I still think it might be useful to be able to set a grace period in the config, after which a restart, stop or update is forced even if players are connected. Otherwise, a daily restart will be impossible in some cases, as some players will stay AFK/online overnight.
I agree I will add that functionality