feat: empty CRON_SCHEDULE keeps container alive for manual docker exec

Three container lifetime modes via CRON_SCHEDULE:
  unset          — run once on startup, exit
  empty string   — sleep infinity; use docker exec -it winnow winnow
  cron expression — run on startup, then on schedule

This replaces the need for a separate MANUAL_MODE env var. The empty
string is a natural "I want the container alive but unscheduled" signal.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 15:01:00 +00:00
co-authored by Claude Sonnet 4.6
parent 2804b21f9e
commit 015db63d19
3 changed files with 28 additions and 9 deletions
+8 -4
View File
@@ -48,10 +48,14 @@ services:
# - RESET_PERSON=John # Clear uploaded+rejected history for one person
# ── Scheduling ────────────────────────────────────────────────────────
# Cron expression (unset = run once and exit)
# - CRON_SCHEDULE=0 3 * * 0 # Every Sunday at 3 AM
# - CRON_SCHEDULE=0 3 1 * * # First of every month
# - CRON_SCHEDULE=*/30 * * * * # Every 30 minutes
# CRON_SCHEDULE controls container lifetime:
# unset — run once on startup, then exit
# empty string — stay alive, run nothing; trigger manually with:
# docker exec -it winnow winnow
# cron expression — run on startup, then on schedule
# - CRON_SCHEDULE= # Manual mode (keep alive, no auto-run)
# - CRON_SCHEDULE=0 3 * * 0 # Every Sunday at 3 AM
# - CRON_SCHEDULE=0 3 1 * * # First of every month
volumes:
# Replace with absolute paths on your host, e.g. /opt/winnow/models
- /path/to/winnow/models:/models