Дежурный оператор парка launchd/cron джоб — карта, аудит тихих поломок, советник размещения.
Что делает
Метафора авиадиспетчера над всеми фоновыми задачами мака: единый реестр «что когда бегает», read-only doctor-аудит класса тихих поломок (plist без PATH к homebrew → падение 127; plist вообще без триггера → джоба никогда не запустится; `op` без service-account токена → окно доступа к Keychain ночью; отсутствующий бинарь; коллизии расписаний; дрифт реестр↔диск). Проверяет ИСХОД, а не паттерн — PATH реальным резолвом бинарей в окружении джобы. Плюс советник новой джобы: свободные слоты по клиренсу от контеншена, кандидаты на слияние, генерация plist из канон-шаблона с self-doctor-гейтом. Диспетчер разрешает посадку — сажает человек (печатает install/rollback, не выполняет).
Как пользоваться
- 1
redjob seed— собрать реестр из ~/Library/LaunchAgents. - 2
redjob list— карта: timeline / persistent / по проектам. - 3
redjob doctor— аудит, exit≠0 при CRITICAL. - 4
redjob vault-audit— кто может открыть окно доступа к 1Password-сейфу. - 5
redjob add job.json --generate— совет + plist под апрув.
Когда срабатывает
Пример
redjob doctor — покажет, какие launchd-джобы тихо ломаются и где коллизии расписаний.
Обновления
Новое правило doctor `no-trigger` — ловит джобу-зомби: plist без единого триггера (StartCalendarInterval / StartInterval / KeepAlive). launchd такой примет и будет вечно молчать — CRITICAL; если стоит RunAtLoad=true (запуск раз на логин) — мягче, WARNING. Правило смотрит в сам распарсенный plist, а не в реестр, который может врать. Плюс `redjob add --generate` теперь заворачивает опечатку в kind на входе — раньше она молча давала plist без триггера. Родилось из реального инцидента: джоба месяц выглядела живой и ни разу не запустилась.
Добавлен в каталог RedSkills.
Понравился скилл? Новые разборы и обновления — в канале.