[Rust] Admin Restart Command In Game Does Not Restart
When the admin in game does a restart command, the LGSM Rust server restarts, which first stops the server, but then it never starts back up. A fix for this would be incredibly helpful.
Isolated issue. More details required.
Edit : I get what you're saying. Don't use that command. Use LGSM restart function. Optionally, use the rcon "save" command before restarting. Lastly, why would one manually restart a rust server?
Restarting manually or automatically is upto the server owner. What matters is the server restart messaging. When we do the global.restart , the messaging is quite proper with countdown which doesn't happen in case of ./rustserver restart. The server just abruptly stops and restarts after sometime. Instead of this abrupt stop if a messaging could be sent to the ingame players similar to global.restart this command would be much more handy
@aelor If you find a way to send RCON commands into Rust, then please share. Otherwise what you proposed which is what we all want remains undoable.
@UltimateByte The great thing about doing "global.restart" via RCON is that it does an automatic save right before shutting down the server. Also, when people get disconnected they see Disconnected: Server Restarting at the bottom of the "Server Details" that they get thrown back to, and in the Console it says:
Disconnect Reason: Server Restarting
Disconnected (Server Restarting) - returning to main menu
When doing rustserver restart people who get disconnected see Disconnected: Timed Out at the bottom of the "Server Details" that they get thrown back to, and in the Console it says:
Disconnected (Timed Out) - returning to main menu
The only problem with using global.restart is that a server that was started with LinuxGSM doesn't actually get restarted and needs to be manually started again.
One way to send RCON commands into Rust may be https://github.com/websockets/wscat
I was able to connect to RCON with: wscat -c ws://SERVER_IP:PORT/PASSWORD
And I successfully send the restart command via:
{"Identifier":1,Message:"global.restart",Name:"WebRcon"}
Now we're talking.
I've done some modifications to the wscat, so it can be given the json-string when being called.
https://github.com/gitforwebwork/wscat/tree/addexecute
Usage:
wscat -c ws://SERVER_IP:PORT/PASSWORD -x '{"Identifier":1,Message:"global.restart",Name:"WebRcon"}'
I added one more parameter do deal with slow requests, but the default works fine for me.
-w or --wait <seconds> will make it wait for a set amount of seconds before quitting (default is 2 seconds)
For now, I have created a little script that I use to monitor the server. I know it's crude, but it does the job. Using the script in a cronjob, I can do `global.restart' via RCON and the server comes back up automatically.
I saved the script to /home/rustserver/monitor-rustserver.sh
#! /bin/bash
rustserver="/home/rustserver/"
rusthash=".cache/servermonitoringhash"
# delete too old hash (a badly timed server crash/reboot could cause that)
if [ -f ${rustserver}${rusthash} ]
then
hashage=$((`date +%s` - `date -r ${rustserver}${rusthash} +%s`))
if [ $hashage -gt 120 ]
then
rm ${rustserver}${rusthash}
fi
fi
#start rustserver, if no process exists
if [ $(pidof RustDedicated | wc -l) -eq 0 ] && [ ! -f ${rustserver}${rusthash} ]
then
touch ${rustserver}${rusthash}
echo "$(date)"
${rustserver}rustserver start
rm ${rustserver}${rusthash}
# monitor rustserver, if it is running for at least 3 minutes
elif [ $(pidof RustDedicated | wc -l) -eq 1 ] && [ $(ps -o etimes= -p $(pidof RustDedicated) | xargs) -gt 180 ] && [ ! -f ${rustserver}${rusthash} ]
then
touch ${rustserver}${rusthash}
echo "$(date)"
${rustserver}rustserver monitor
rm ${rustserver}${rusthash}
fi
I made it wait for 180 seconds, before doing rustserver monitor, because in some "unfortunately timed" tests the server did not come back up fast enough and it restarted it again.
The cronjobs I am running to monitor and restart the server:
* * * * * /home/rustserver/monitor-rustserver.sh >> /home/rustserver/log/uptime/monitor-rustserver.sh 2>&1
* * * * * sleep 10; /home/rustserver/monitor-rustserver.sh >> /home/rustserver/log/uptime/monitor-rustserver.log 2>&1
* * * * * sleep 20; /home/rustserver/monitor-rustserver.sh >> /home/rustserver/log/uptime/monitor-rustserver.log 2>&1
* * * * * sleep 30; /home/rustserver/monitor-rustserver.sh >> /home/rustserver/log/uptime/monitor-rustserver.log 2>&1
* * * * * sleep 40; /home/rustserver/monitor-rustserver.sh >> /home/rustserver/log/uptime/monitor-rustserver.log 2>&1
* * * * * sleep 50; /home/rustserver/monitor-rustserver.sh >> /home/rustserver/log/uptime/monitor-rustserver.log 2>&1
0 5 * * * wscat -c ws://SERVER_IP:PORT/PASSWORD -x '{"Identifier":1,Message:"global.restart 10",Name:"WebRcon"}' > /dev/null 2>&1
If you want to use this... make sure you have the folders /home/rustserver/.cache/ and /home/rustserver/log/uptime/, or modify the script and cronjobs to use whatever folders you want.
Even though the rusthash should prevent the script to run rustserver start or rustserver monitor twice, I would not recommend running the monitoring script every second.