{"definition_raw":"---\nid: cron-watchdog\ntitle: Cron watchdog \u2014 Telegram alert for overdue tasks\nschedule: \"*/30 * * * *\"\ntimeout: 120\nretry: false\nenabled: true\nnotify_on: failure\nrun_as: shell\ncommand: \". ~/.claude/env/api_keys.env 2>/dev/null; python3 /home/lucienne/workspace/scripts/cron_watchdog.py\"\ntags: [infra, observability, watchdog]\nruntime_profile: direct_mixed\n---\n\n**OVERRIDES runtime profile:** uses notify.py (urllib direct Telegram) because\nthis watchdog never invokes the `claude` CLI \u2014 pure HTTP poll + alert.\n\nEvery 30 min, hits MC's `/api/v1/scheduler/inspect` and alerts Telegram (MC\nforum topic) for any task overdue by more than 2\u00d7 its cron interval. Skips\ntasks marked `disabled` or `runtime_profile: manual`. Dedup'd per task at\n1-hour cadence so a stuck task pings at most once per hour.\n\nComplements `scheduler-watchdog.md` (creates MC tickets for various failure\nmodes) \u2014 this one is the fast Telegram side-channel so Elmar sees stuck\nschedules within a single cycle rather than at the next hourly watchdog tick.\n\nImplementation: `~/workspace/scripts/cron_watchdog.py`.\nTicket: MC-3306.\n","id":"cron-watchdog","last_run":{"duration_s":0.277272,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413827.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T06:00:02.438768+02:00","status":"completed"},"next_run":"2026-06-13 06:30","next_run_iso":"2026-06-13T06:30:00+02:00","runs":[{"duration_s":0.277272,"finished_at":"2026-06-13T06:00:02.718501+02:00","id":413827,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413827.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T06:00:02.438768+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.285981,"finished_at":"2026-06-13T05:30:02.689022+02:00","id":413743,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413743.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T05:30:02.400405+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.305967,"finished_at":"2026-06-13T05:00:08.056790+02:00","id":413658,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413658.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T05:00:07.748938+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.254843,"finished_at":"2026-06-13T04:30:02.566599+02:00","id":413570,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413570.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T04:30:02.308367+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.300286,"finished_at":"2026-06-13T04:00:02.672240+02:00","id":413480,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413480.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T04:00:02.369566+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.281358,"finished_at":"2026-06-13T03:30:42.395989+02:00","id":413395,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413395.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T03:30:42.110873+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.308682,"finished_at":"2026-06-13T03:00:02.682195+02:00","id":413301,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413301.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T03:00:02.370361+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.328286,"finished_at":"2026-06-13T02:30:02.712420+02:00","id":413216,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413216.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T02:30:02.380220+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.328599,"finished_at":"2026-06-13T02:00:16.713621+02:00","id":413127,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413127.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T02:00:16.381154+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.259417,"finished_at":"2026-06-13T01:30:02.445149+02:00","id":413042,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/413042.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T01:30:02.183540+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.29617,"finished_at":"2026-06-13T01:00:02.834496+02:00","id":412952,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412952.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T01:00:02.535706+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.236047,"finished_at":"2026-06-13T00:30:02.476195+02:00","id":412866,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412866.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T00:30:02.237448+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.490865,"finished_at":"2026-06-13T00:00:02.855218+02:00","id":412774,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412774.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-13T00:00:02.361903+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.304612,"finished_at":"2026-06-12T23:30:02.769055+02:00","id":412690,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412690.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T23:30:02.462668+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.27439,"finished_at":"2026-06-12T23:00:02.713659+02:00","id":412600,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412600.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T23:00:02.435869+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.153177,"finished_at":"2026-06-12T22:30:02.512488+02:00","id":412516,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412516.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T22:30:02.357371+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.188676,"finished_at":"2026-06-12T22:00:02.787378+02:00","id":412426,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412426.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T22:00:02.596837+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.263284,"finished_at":"2026-06-12T21:30:02.672114+02:00","id":412342,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412342.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T21:30:02.406253+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.259167,"finished_at":"2026-06-12T21:00:02.606600+02:00","id":412253,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412253.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T21:00:02.345376+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"},{"duration_s":0.255072,"finished_at":"2026-06-12T20:30:02.456148+02:00","id":412167,"log_path":"/home/lucienne/workspace/logs/task-runs/cron-watchdog/412167.log","output":"[cron-watchdog] inspected 119 tasks, 0 overdue\n","started_at":"2026-06-12T20:30:02.198546+02:00","status":"completed","task_id":"cron-watchdog","task_name":"Cron watchdog \u2014 Telegram alert for overdue tasks"}],"runs_limit":20,"schedule":"*/30 * * * *","schedule_label":{"description":"Every 30 minutes","is_custom":false,"label":"Every 30 min","sort":1,"sort_time":""},"stats":{"avg_duration":0.37471713180515753,"completed":349,"failed":0,"timeout":0,"total":349},"task":{"_description":"**OVERRIDES runtime profile:** uses notify.py (urllib direct Telegram) because\nthis watchdog never invokes the `claude` CLI \u2014 pure HTTP poll + alert.\n\nEvery 30 min, hits MC's `/api/v1/scheduler/inspect` and alerts Telegram (MC\nforum topic) for any task overdue by more than 2\u00d7 its cron interval. Skips\ntasks marked `disabled` or `runtime_profile: manual`. Dedup'd per task at\n1-hour cadence so a stuck task pings at most once per hour.\n\nComplements `scheduler-watchdog.md` (creates MC tickets for various failure\nmodes) \u2014 this one is the fast Telegram side-channel so Elmar sees stuck\nschedules within a single cycle rather than at the next hourly watchdog tick.\n\nImplementation: `~/workspace/scripts/cron_watchdog.py`.\nTicket: MC-3306.","_file":"cron-watchdog.md","_path":"/home/lucienne/workspace/tasks/cron-watchdog.md","command":". ~/.claude/env/api_keys.env 2>/dev/null; python3 /home/lucienne/workspace/scripts/cron_watchdog.py","enabled":true,"id":"cron-watchdog","notify_on":"failure","retry":false,"run_as":"shell","runtime_profile":"direct_mixed","schedule":"*/30 * * * *","tags":["infra","observability","watchdog"],"timeout":120,"title":"Cron watchdog \u2014 Telegram alert for overdue tasks"}}
