Coding

Cron Management

Try it

Manage OpenClaw cron jobs — list, pause, resume, maintenance mode, and health checks.

What it does

cron-management — OpenClaw Cron Job Manager

The skill document

cron-management — OpenClaw Cron Job Manager

Structured commands for managing cron jobs without raw JSON patches.

Commands

CommandDescription
cronctl listList all jobs with status (✅/❌)
cronctl show Show detailed info for one job
cronctl pause Disable a single job
cronctl resume Re-enable a single job
cronctl pause-allDisable ALL jobs
cronctl resume-allRe-enable ALL jobs
cronctl maintenance onEnable maintenance mode (stops all jobs at runtime)
cronctl maintenance offDisable maintenance mode
cronctl statusShow health dashboard (recent failures, disabled jobs, overdue)
cronctl health Show last run status and diagnostics for a job

Maintenance Mode

Emergency stop that works even if OpenClaw is down. Jobs check for /tmp/cron-paused at startup:

if [ -f /tmp/cron-paused ]; then
  echo "Cron paused at $(cat /tmp/cron-paused)" >> /tmp/cron-skipped.log
  exit 0  # or reply NO_REPLY for agentTurn jobs
fi

Toggle: cronctl maintenance on|off

Script

  • scripts/cronctl.sh — Main CLI wrapper around openclaw cron

Integration with Job Payloads

To add maintenance mode checks to existing jobs, add this at the top of each cron payload:

For shell-based payloads:

if [ -f /tmp/cron-paused ]; then
  echo "$(date -Iseconds) — $JOB_NAME skipped (maintenance mode)" >> /tmp/cron-skipped.log
  exit 0
fi

For agentTurn payloads (OpenClaw): Add to the beginning of the message text:

If /tmp/cron-paused exists, reply NO_REPLY and exit.

For Python scripts:

import os
import sys
from datetime import datetime

PAUSE_FILE = "/tmp/cron-paused"
SKIP_LOG = "/tmp/cron-skipped.log"

def check_maintenance_mode():
    if os.path.exists(PAUSE_FILE):
        with open(SKIP_LOG, "a") as f:
            f.write(f"{datetime.now().isoformat()} — {sys.argv[0]} skipped (maintenance mode)\n")
        sys.exit(0)

check_maintenance_mode()

For Node.js scripts:

const fs = require('fs');
const path = require('path');

const PAUSE_FILE = '/tmp/cron-paused';
const SKIP_LOG = '/tmp/cron-skipped.log';

function checkMaintenanceMode() {
  if (fs.existsSync(PAUSE_FILE)) {
    const entry = `${new Date().toISOString()} — ${path.basename(process.argv[1])} skipped (maintenance mode)\n`;
    fs.appendFileSync(SKIP_LOG, entry);
    process.exit(0);
  }
}

checkMaintenanceMode();

Rollout Strategy

  1. New jobs: Include maintenance check from the start
  2. Existing jobs: Update incrementally, starting with most frequent (every 30 min, hourly)
  3. Verification: Enable maintenance mode, wait for next trigger, check /tmp/cron-skipped.log

Health Dashboard

cronctl status shows:

  • Total jobs, enabled/disabled counts
  • Jobs that failed in last 24h (consecutiveErrors > 0)
  • Jobs disabled but not in maintenance mode (unexpected state)
  • Jobs whose last run was >2x their interval (overdue)

Examples

# Quick status overview
cronctl status

# Pause just the blog writer for debugging
cronctl pause cloudy-blog-writer

# Emergency stop everything
cronctl maintenance on

# Resume everything after fix
cronctl maintenance off
cronctl resume-all

# Check why a job keeps failing
cronctl health graph-memory-queue-sync

Implementation Details

See memory-bank/implementation-details/cron-management.md for:

  • Architecture (two-layer design)
  • Rollout strategy
  • Error handling
  • State files and security
  • Future enhancements

Related skills

Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.

by Iván559 installs18 stars

Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.

by nssa.io1.0k installs47 stars

Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.

by Iván855 installs69 stars

Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.

by fly0pants4.3k installs296 stars

Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.

by johnpatternai22 installs8 stars

More from space-cadet

Browse all skills

Memory Bank Update Workflow — v6.12 compliant with project-repo awareness. Use when the user invokes $mem-update or asks for this workflow by name. Triggers on "update memory bank", "create edit chunk", "update tasks.md", "update session cache", "memory bank update workflow". NOT for database-native workflows (use mb-db-workflow instead).

by space-cadet2 installs

Memory Bank Template Compliance Cleaner Workflow Use when the user invokes $mem-format or asks for this workflow by name.

by space-cadet1 installs

Global Memory Bank Deep Scan and Task Analysis Workflow — Multi-repo aware. Use when the user invokes $mem-scan or asks for this workflow by name.

by space-cadet1 installs

Track, aggregate, and report OpenClaw token usage and costs across sessions.

by space-cadet1 installs

Initialize a memory bank for a new or existing project following the v6.12 protocol. Use when starting work on a project that lacks memory-bank documentation...

by space-cadet

Combined network + gateway status with VPN info, IP location, and system health

by space-cadet