Scheduling, Cron, Daemon, and Startup
This document explains how Snoopy runs jobs continuously and survives restarts.
Scheduling Model
- Scheduler:
node-cron - Each enabled job registers one cron task.
- Default schedule when creating jobs:
*/30 * * * *(every 30 minutes).
At each tick:
- Job is reloaded from DB.
- If still enabled, runner executes.
- Run stats are persisted in
job_runs. - Scanned items are persisted in
scan_itemsfor dedupe and auditing.
Daemon Lifecycle
Commands:
snoopy daemon startsnoopy daemon stopsnoopy daemon statussnoopy daemon run
Behavior:
daemon startlaunches detached process and writes PID file.- PID file path:
<root>/daemon.pid. daemon statusverifies PID file and process liveness.daemon runkeeps scheduler in foreground and is useful for debugging.
Manual Runs vs Scheduled Runs
Manual run:
snoopy job run <jobRef> --limit 5
Manual runs are ideal for:
- quick rubric checks
- model configuration validation
- smoke testing new jobs
Scheduled runs are best for continuous monitoring once a job is trusted.
Cron Expressions
jobs.schedule_cron supports standard cron syntax used by node-cron.
Examples:
*/30 * * * *every 30 minutes0 * * * *hourly0 9 * * *daily at 09:00
Startup-on-Reboot/Login
Snoopy supports OS startup registration.
Commands:
snoopy startup installsnoopy startup uninstallsnoopy startup enablesnoopy startup disablesnoopy startup status
Alias group:
snoopy reboot enable|disable|status
macOS
Primary method:
- launchd LaunchAgent
Status checks for:
~/Library/LaunchAgents/com.snoopy.daemon.plist
Linux
Preferred method:
- systemd user service (when available)
Fallback method:
- cron
@rebootentry
Status checks:
- systemd service file in
~/.config/systemd/user/ - crontab entry containing
snoopy daemon run
Windows
Preferred method:
- Task Scheduler job
Fallback method:
- HKCU Run registry entry
Status checks:
schtasks /query /tn "Snoopy\\Daemon"reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v SnoopyDaemon
Operational Recommendations
- During setup: run
snoopy doctorafter configuring settings. - Before enabling startup: confirm
daemon startworks. - After reboot registration: verify with
startup statusanddaemon status. - For debugging noisy jobs: use manual runs with
--limit.