2026 Аренда Mac Mini: launchd и PM2 для долгих задач 7×24 — матрица выбора, plist, автозапуск и ротация логов
Независимым разработчикам и небольшим командам, которые держат на арендованном Mac Mini фоновые воркеры в режиме семь на двадцать четыре, нужен однозначный ответ: доверить процесс встроенному в macOS launchd или поставить перед Node и Python прослойку PM2 как единый хранитель процессов.
Ниже — сравнительная таблица по сценариям, журналам, рестарту при сбое и накладным расходам, чек-лист полей plist, шаги для PM2 с автозапуском через launchd, заметки о ротации логов и блок FAQ. Перейдите на главную, в блог, на страницу аренды или в центр помощи, когда будете подключать узел. Дополнительно полезны материалы про SLA долгих задач, cron и watchdog, удержание Ollama семь на двадцать четыре и health check с webhook.
Типичные болевые точки до выбора супервизора
- Путаница с сессией SSH. Процесс, запущенный только внутри интерактивной оболочки, исчезает при обрыве сессии, пока им не владеет launchd или PM2.
- Штормы перезапуска. Агрессивный respawn без ThrottleInterval у launchd или без backoff в PM2 маскирует корневую причину и раздувает диск дубликатами строк в логах.
- Наблюдаемость. После окна обслуживания провайдера нужны предсказуемые пути к логам, коды выхода и одна точка правды о состоянии долгой задачи.
① Матрица решений по выбору между launchd и PM2
Таблица для быстрого сканирования: куда ложится Mac Mini с Apple Silicon, когда важнее нативный планировщик macOS, а когда — экосистема Node.
| Супервизор | Применимые сценарии | Журналы | Перезапуск при падении | Ресурсы |
|---|---|---|---|---|
| LaunchAgent (launchd) | Один бинарник Go или Swift, тонкий shell-обёртка, редко меняющийся долгий воркер без нескольких рантаймов. | StandardOutPath и StandardErrorPath; при необходимости дублирование в unified logging. | KeepAlive с настройкой SuccessfulExit; ThrottleInterval сдерживает плотные циклы после краша. | Минимальный RSS сверх вашей задачи; нет постоянного родителя-интерпретатора, если вы его сами не указали. |
| PM2 | Несколько сервисов Node, смешанные скрипты, кластер и единый ecosystem для команды на аренде. | Каталог логов PM2 на пользователя; опционально JSON-логи и модуль ротации. | Встроенные лимиты рестартов, cluster и graceful reload для выката без полной остановки. | Постоянный родительский процесс Node плюс демон PM2; ориентируйтесь на десятки мегабайт до учёта куч приложений. |
Гибрид PM2 под launchd часто оптимален: launchd гарантирует старт при входе пользователя, PM2 управляет жизненным циклом приложений. Для HTTP-портов добавьте внешние пробы по образцу guardian и webhook.
② Ключевые поля plist launchd — операционный чек-лист
User Agent размещайте в ~/Library/LaunchAgents, проверяйте синтаксис plutil -lint, на современных версиях macOS подключайте через launchctl bootstrap gui/$UID с указанием plist.
- Label — уникальная строка для
launchctl. - ProgramArguments — массив с абсолютными путями; избегайте хрупкой зависимости от PATH интерактивной оболочки.
- WorkingDirectory — чтобы относительные пути к данным совпадали после перезагрузки Mac Mini.
- RunAtLoad — true, если job должен стартовать при загрузке агента.
- KeepAlive — при необходимости перезапуска после ненулевого кода укажите SuccessfulExit false или используйте словарь с условиями.
- ThrottleInterval — пауза в секундах между попытками; для «шумных» воркеров начните с десяти секунд.
- StandardOutPath и StandardErrorPath — на томе с запасом квоты и свободного места.
- EnvironmentVariables — токены и URL лучше подставлять отсюда или из Keychain, а не вшивать секреты в репозиторий.
- Nice или LowPriorityIO — если пакетная долгая задача не должна вытеснять интерактивные сессии арендатора.
После правок выполните launchctl bootout для старой записи и снова bootstrap, иначе в памяти останется устаревшая конфигурация хранителя процессов.
③ Конфигурация PM2 и автозапуск при входе в систему
Рассматривайте PM2 как супервизор приложений, а macOS по-прежнему владеет жизненным циклом пользовательской сессии на удалённом узле.
- Установите LTS Node, затем
npm install -g pm2для глобального CLI. - Опишите
ecosystem.config.cjs: имя, script, cwd, переменные среды иmax_memory_restartс учётом unified memory на Apple Silicon. - Запустите
pm2 start ecosystem.config.cjsи убедитесь, чтоpm2 statusпоказывает online. - Зафиксируйте список процессов командой
pm2 saveпосле стабилизации графа зависимостей. - Сгенерируйте связку с launchd:
pm2 startup launchd, выполните напечатанную команду от имени нужного пользователя, перезагрузите узел и проверьте поведениеpm2 resurrect. - Задокументируйте порты и health URL рядом с учётными данными из консоли RunMini.
④ Ресурсы и ротация логов
На арендованном Mac Mini типичный отказ — исчерпание свободного места APFS, когда текстовые журналы росли месяцами без сжатия и усечения.
- Направляйте stdout launchd в выделенное дерево
logs/и подключайте newsyslog, внешний logrotate или еженедельный скрипт усечения. - Включите модуль ротации PM2 либо стриминг на удалённое хранилище, если ретеншн превышает несколько недель.
- Следите за давлением памяти, если параллельно крутится инференс и много воркеров; согласуйте max_memory_restart с реальным объёмом RAM конфигурации.
Цифры для runbook: стартуйте ThrottleInterval с десяти секунд для нестабильных процессов. Закладывайте пятьдесят–девяносто мегабайт резидентной памяти на сам PM2 до учёта куч ваших сервисов. Начинайте ротацию или сжатие логов до срабатывания предупреждений о свободном месте ниже пятнадцати процентов на томе с данными.
⑤ FAQ
Нужен ли PM2, если у меня один Node API?
Не обязателен: launchd достаточен для одного процесса и минимального стека. PM2 оправдан при кластере, частых выкатах с reload и нескольких именованных процессах в одном репозитории.
Почему процесс пропадает после выхода из SSH?
Потому что супервизор не зарегистрирован: перенесите команду в LaunchAgent или доверьте список процессов PM2 с последующим pm2 save и pm2 startup launchd.
Делает ли launchd ротацию логов сам?
Нет: файлы по StandardOutPath растут линейно. Сочетайте их с внешней ротацией или политикой архивации; у PM2 аналогично используйте модуль или внешние инструменты.
Где взять узел и тариф после чтения чек-листа?
Откройте страницу аренды, сравните конфигурации на странице цен, затем пройдите шаги из центра помощи для SSH и доступа к консоли.
Дальнейшие шаги: зафиксируйте выбранный хранитель процессов, один раз проверьте сценарий перезагрузки, затем вынесите автоматизацию на выделенный Mac Mini. Сверьтесь с тарифами, завершите оформление аренды и держите runbook из блога рядом с заметками дежурства.
Mac Mini под launchd и PM2
Нужен Apple Silicon онлайн для сборок, агентов и долгих задач семь на двадцать четыре? Загляните на главную, сравните тарифы, оформите аренду. В блоге — гайды по долгому хостингу; в центре помощи — доступ по SSH и VNC.
Арендованный Mac Mini сохраняет ваши профили launchd и PM2 переносимыми между проектами. Завершите покупку тарифа, добавьте в закладки помощь, читайте материалы про долгосрочный хостинг в блоге RunMini или вернитесь на главную.