Skip to main content
The status and update commands help you monitor and maintain your running OpenClaw stack.

status command

Show the status of all services in the running stack.

Usage

create-better-openclaw status [options]

Options

--dir
string
default:"."
Project directory containing the stack (default: current directory).
--json
boolean
default:"false"
Output results as JSON for programmatic use.

Examples

Check stack status

cd my-stack
create-better-openclaw status
Output:
Stack Status:

 postgres          running    5m      healthy
 redis             running    5m      healthy
 qdrant            running    5m      healthy
 openclaw          running    5m      healthy
 prometheus        exited     2m      unhealthy

Services: 4/5 running

Check status in specific directory

create-better-openclaw status --dir ./production-stack

JSON output

create-better-openclaw status --json
Output:
{
  "services": [
    {
      "name": "postgres",
      "state": "running",
      "status": "healthy",
      "uptime": "5m",
      "image": "postgres:16-alpine",
      "ports": ["5432:5432"]
    },
    {
      "name": "redis",
      "state": "running",
      "status": "healthy",
      "uptime": "5m",
      "image": "redis:7-alpine",
      "ports": ["6379:6379"]
    },
    {
      "name": "prometheus",
      "state": "exited",
      "status": "unhealthy",
      "uptime": "2m",
      "image": "prom/prometheus:latest",
      "exitCode": 1
    }
  ],
  "summary": {
    "total": 5,
    "running": 4,
    "stopped": 1,
    "healthy": 4,
    "unhealthy": 1
  }
}

update command

Pull latest Docker images and restart the stack.

Usage

create-better-openclaw update [options]

Options

--dir
string
default:"."
Project directory containing the stack (default: current directory).
--dry-run
boolean
default:"false"
Show what would be updated without making changes.
--json
boolean
default:"false"
Output results as JSON for programmatic use.

Examples

Update all images

cd my-stack
create-better-openclaw update
Output:
Updating stack...

  Pulling images:
 postgres:16-alpine      (up to date)
 redis:7-alpine          (up to date)
 qdrant/qdrant:latest    (downloading...)
 openclaw/openclaw:latest (downloading...)

  Pulling complete.

  Restarting services:
 postgres
 redis
 qdrant
 openclaw

Update complete! All services restarted.

Dry run to preview updates

create-better-openclaw update --dry-run
Output:
Dry run mode - no changes will be made.

  Would pull:
    postgres:16-alpine       (current: sha256:abc123...)
    redis:7-alpine           (current: sha256:def456...)
    qdrant/qdrant:latest     (current: sha256:ghi789..., new: sha256:jkl012...)
    openclaw/openclaw:latest (current: sha256:mno345..., new: sha256:pqr678...)

  Would restart:
    qdrant
    openclaw

No changes made (dry run).

Update specific directory

create-better-openclaw update --dir ./production-stack

JSON output

create-better-openclaw update --json
Output:
{
  "updated": [
    {
      "service": "qdrant",
      "image": "qdrant/qdrant:latest",
      "oldDigest": "sha256:ghi789...",
      "newDigest": "sha256:jkl012..."
    },
    {
      "service": "openclaw",
      "image": "openclaw/openclaw:latest",
      "oldDigest": "sha256:mno345...",
      "newDigest": "sha256:pqr678..."
    }
  ],
  "unchanged": [
    "postgres",
    "redis"
  ],
  "restarted": [
    "postgres",
    "redis",
    "qdrant",
    "openclaw"
  ]
}

Use cases

Health monitoring

Regularly check stack health:
#!/bin/bash
# Monitor stack and alert on issues
if ! create-better-openclaw status --json | jq -e '.summary.unhealthy == 0'; then
  echo "Alert: Unhealthy services detected!"
  create-better-openclaw status
fi

Scheduled updates

Automate stack updates with cron:
# Check for updates daily at 3 AM
0 3 * * * cd /opt/my-stack && create-better-openclaw update >> /var/log/openclaw-update.log 2>&1

Pre-update checks

Preview updates before applying:
# Check what would be updated
create-better-openclaw update --dry-run

# Review changes, then apply
read -p "Proceed with update? (y/n) " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
  create-better-openclaw update
fi

Rollback on failure

Combine with backup for safe updates:
#!/bin/bash
# Backup before update
create-better-openclaw backup create

# Update stack
if ! create-better-openclaw update; then
  echo "Update failed, restoring from backup..."
  LATEST_BACKUP=$(create-better-openclaw backup list --json | jq -r '.backups[0].file')
  create-better-openclaw backup restore "$LATEST_BACKUP"
fi

Integration with monitoring

Send status to monitoring systems:
#!/bin/bash
# Export status to Prometheus pushgateway
STATUS=$(create-better-openclaw status --json)
RUNNING=$(echo "$STATUS" | jq '.summary.running')
TOTAL=$(echo "$STATUS" | jq '.summary.total')

echo "openclaw_services_running $RUNNING" | curl --data-binary @- http://pushgateway:9091/metrics/job/openclaw
echo "openclaw_services_total $TOTAL" | curl --data-binary @- http://pushgateway:9091/metrics/job/openclaw

Status indicators

Service states

  • running - Service container is running
  • exited - Service container has stopped
  • restarting - Service is restarting
  • paused - Service is paused
  • dead - Service is in dead state

Health statuses

  • healthy - Health check passing
  • unhealthy - Health check failing
  • starting - Health check not yet run
  • none - No health check configured

Update behavior

What gets updated

  • Docker images are pulled from registry
  • Services using updated images are restarted
  • Configuration files are not modified
  • Persistent data is preserved

Update strategy

  1. Pull all images
  2. Stop all services
  3. Start services in dependency order
  4. Wait for health checks

Data safety

The update command:
  • ✓ Preserves volumes and data
  • ✓ Preserves environment variables
  • ✓ Maintains network configuration
  • ✗ Does NOT backup data automatically (use backup create first)

Troubleshooting

Service shows unhealthy

Check logs for the specific service:
docker compose logs prometheus

Update fails to pull images

Check Docker registry access:
docker login
docker pull qdrant/qdrant:latest

Services won’t start after update

Check for breaking changes in new image versions:
docker compose logs
docker compose down
docker compose up -d

Build docs developers (and LLMs) love