OpenClaw Safe Upgrade
Safe OpenClaw upgrade with instant rollback. Use when user says "upgrade openclaw", "update openclaw", "check for updates", or any request to upgrade/update...
Description
name: upgrade description: Safe OpenClaw upgrade with instant rollback. Use when user says "upgrade openclaw", "update openclaw", "check for updates", or any request to upgrade/update the OpenClaw installation. NOT for config changes (use gateway config.patch). NOT for skill updates (use clawhub).
OpenClaw Safe Upgrade
Single atomic command. Auto-rollbacks on ANY failure. Survives the gateway restart it triggers.
Script
# From an agent session — ALWAYS set escape flag (ensures script survives gateway restart)
_UPGRADE_FORCE_ESCAPE=1 bash skills/upgrade/scripts/safe-upgrade.sh
# Force upgrade even if already on latest
_UPGRADE_FORCE_ESCAPE=1 bash skills/upgrade/scripts/safe-upgrade.sh --force
# Safe read-only checks (no escape needed)
bash skills/upgrade/scripts/safe-upgrade.sh --check # Pre-flight only
bash skills/upgrade/scripts/safe-upgrade.sh --rollback # Manual rollback
What Happens (one command, 10 steps)
- Cgroup escape: re-execs via
systemd-run --user --scopeso gateway stop can't kill the script - Pre-flight: version check, disk space, breaking changes
- Backup: installation tarball, config, cron jobs, acpx customizations
npm i -g openclaw@latest- Restore acpx config (ACP agent customizations survive upgrades)
- Gateway restart (process-isolated: stop + start, survives script's own lifecycle)
- Wait for gateway health (configurable timeout) → auto-rollback if fails
- Wait for WhatsApp reconnect (non-fatal timeout)
- Verify: correct version + cron count preserved → auto-rollback if fails
- Record result → optional golden snapshot → cleanup backup
If ANY critical check fails, the script automatically rolls back — restores install, config, crons, and acpx. Trap handler catches unexpected exits during critical phases.
Agent Workflow
- Run
--checkfirst. Review output with the user. - Inform user: "Launching upgrade — I'll go offline during gateway restart."
- Run the upgrade:
Do NOT pipe the output (no_UPGRADE_FORCE_ESCAPE=1 bash skills/upgrade/scripts/safe-upgrade.sh| tee, no2>&1 | cat). The script writes to/tmp/upgrade-live.log. - The current session will end when the gateway restarts. This is expected.
- After restart, the new session checks:
~/.openclaw/upgrade-result.jsonfor status/tmp/upgrade-live.logfor live outputsuccess: report to user, update any version referencesrolled_back: tell user what went wrong (reason in result file)- No result file + backup at
~/.openclaw/upgrade-backups/current/: script was killed — run--rollback
- Full forensic log at
~/.openclaw/upgrade-last.log.
What Gets Backed Up
- OpenClaw installation tarball
- Config (
openclaw.json) - Cron jobs (
jobs.json) - acpx user config (
~/.acpx/config.json) if present - Metadata (from/to version, timestamp, cron count)
Backup location: ~/.openclaw/upgrade-backups/current/
Result File
~/.openclaw/upgrade-result.json:
{
"status": "success|rolled_back|rollback_failed|no_change|blocked",
"from_version": "2026.3.2",
"to_version": "2026.3.7",
"message": "...",
"timestamp": "...",
"log": "~/.openclaw/upgrade-last.log"
}
Why Cgroup Escape?
OpenClaw runs as a systemd service. When an agent runs this script, the script is a child process inside the service's cgroup. systemctl stop sends SIGKILL to ALL processes in the cgroup — including the upgrade script. SIGKILL cannot be caught (no trap handler fires).
The script detects this and re-execs itself via systemd-run --user --scope into its own transient systemd scope. The parent process exits immediately — no pipes, no tee, no connections back to the gateway cgroup. This is why piping output is forbidden.
Important Notes
- Never run
gateway update.rundirectly — always use this script - Always set
_UPGRADE_FORCE_ESCAPE=1when running from an agent session - acpx customizations are auto-preserved across upgrades
- Rollback restores the EXACT previous state: install + config + crons + acpx
--checkis safe to run anytime, changes nothing- The script auto-detects gateway port from config (no hardcoded defaults)
- Optional hooks: if
golden-snapshot.shorservice-quick-check.pyexist in your workspace, they're used; otherwise silently skipped
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!