Automatic restarts for a Palworld server
Palworld's memory grows with every base and every pal in the world and is never given back, which makes a daily restart especially worthwhile on a dedicated server. Here, long uptime and good performance really do pull against each other.
When should it restart?
Put {{minutes}} wherever the number of minutes left should appear.
What happens, in order
- Job startsWarn
Broadcast Server restarting in 15 min - 10 min beforeWarn
Broadcast Server restarting in 10 min - 5 min beforeWarn
Broadcast Server restarting in 5 min - 1 min beforeWarn
Broadcast Server restarting in 1 min - Restart timeSave
Save - Restart timeStop
Shutdown 60 Scheduled restart
Shutdown takes a delay in seconds and its own message, so it can do the final countdown for you. Note the quirk in Broadcast: on many builds it truncates at the first space, so a multi-word warning arrives as one word. Test yours before trusting it, and fall back to the Shutdown message if it does.
The crontab line
Moved 15 minutes ahead of the time you picked, so the restart happens at that time instead of 15 minutes later.
45 3 * * * /opt/restart-palworld.sh
The script it runs
Save it as /opt/restart-palworld.sh and mark it executable. It expects rcon-cli on the path and takes the password from an environment variable instead of storing it in the file.
#!/usr/bin/env bash
set -euo pipefail
# Scheduled restart for Palworld.
# Generated by spawnbench.com/restart-scheduler
# The password stays out of this file. Put it in the environment, or in a
# file only root can read, and export it before this script runs.
RCON_HOST="${RCON_HOST:-127.0.0.1}"
RCON_PORT="${RCON_PORT:-25575}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"
send() {
rcon-cli --host "$RCON_HOST" --port "$RCON_PORT" --password "$RCON_PASSWORD" "$1"
}
# 15 minute warning
send 'Broadcast Server restarting in 15 min'
sleep 300
# 10 minute warning
send 'Broadcast Server restarting in 10 min'
sleep 300
# 5 minute warning
send 'Broadcast Server restarting in 5 min'
sleep 240
# 1 minute warning
send 'Broadcast Server restarting in 1 min'
sleep 60
# Flush the world to disk
send 'Save'
sleep 10
# Shut down cleanly
send 'Shutdown 60 Scheduled restart'
# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start palworld 2>/dev/null || trueHeads up: cron follows the server clock, not your local time. Check with timedatectl first. A container set to UTC and an admin living in Europe differ by two hours in summer and by one in winter, so 04:00 may not be the 04:00 you had in mind.
Advertisement
What is different about Palworld
Watch for two oddities. On many builds Broadcast cuts the message off at the first space, so a warning of several words arrives as one — try yours before depending on it. And Shutdown accepts a delay in seconds and a message of its own, so it can handle the final countdown by itself; if Broadcast misbehaves on your build, lean on a long Shutdown delay rather than a series of warnings.
Advertisement