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
Project directory containing the stack (default: current directory).
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
Project directory containing the stack (default: current directory).
Show what would be updated without making changes.
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
- Pull all images
- Stop all services
- Start services in dependency order
- 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