Skip to content

Decouple UPDATE_ON_BOOT and AUTO_UPDATE_ENABLED #915

Description

@leshicodes

Is your feature request related to a problem? Please describe

I run my server with a frequent auto-reboot cron (every 4 hours). I want the server to periodically check for Palworld patches and apply them automatically, but I do not want the entire server binary redownloaded on every single container restart. Currently this is impossible because AUTO_UPDATE_ENABLED is hard-gated behind UPDATE_ON_BOOT in two places (scripts/start.sh:136 and scripts/update.sh:16), and UPDATE_ON_BOOT=true deletes the appmanifest on every boot, forcing a full reinstall.

The only way to get periodic update checks is to also accept full reinstalls on every boot. With a 4-hour reboot cycle, that's untenable.

Describe the solution you'd like

Decouple AUTO_UPDATE_ENABLED from UPDATE_ON_BOOT so they function as independent features:

  • UPDATE_ON_BOOT controls only boot-time behavior (reinstall/validate on container start).
  • AUTO_UPDATE_ENABLED controls only periodic update checks via cron, regardless of the UPDATE_ON_BOOT value.

Specifically, two changes:

  1. scripts/start.sh:136 gate the auto-update cron job on
    AUTO_UPDATE_ENABLED only:

    - if [ "${AUTO_UPDATE_ENABLED,,}" = true ] && [ "${UPDATE_ON_BOOT}" = true ];
    + if [ "${AUTO_UPDATE_ENABLED,,}" = true ];
  2. scripts/update.sh:16-20 guard the update script with
    AUTO_UPDATE_ENABLED instead of UPDATE_ON_BOOT:

    - if [ "${UPDATE_ON_BOOT,,}" != true ]; then
    + if [ "${AUTO_UPDATE_ENABLED,,}" != true ]; then

UpdateRequired() already does a lightweight manifest comparison against the Steam API before downloading, so the cron path would remain efficient ; only downloading when a new manifest is actually detected.

Describe alternatives you've considered

  1. Setting UPDATE_ON_BOOT=true and accepting the overhead. With a 4 hour reboot cycle, deleting appmanifest + full SteamCMD validation every boot is far too wasteful.

  2. Manual updates. Exec into the container, delete the appmanifest, restart. Viable but defeats the purpose of automation. I suppose I could script this out...?

  3. Mounting a patched entrypoint script. Avoids forking the image but is super hokey imo.

Additional context

there's no way to get periodic updates without also accepting boot-time reinstalls:

UPDATE_ON_BOOT AUTO_UPDATE_ENABLED Result
false false No boot reinstall, no cron
false true No boot reinstall, cron silently skipped
true false Full reinstall every boot, no cron
true true Full reinstall every boot + cron

This is a small, low-risk change (+1/-5 lines) with no breaking behavior.

Feature Report Checklist

  • I am willing to implement this feature

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions