Кто рулит питанием: pmset и I/O Kit
За энергопрофиль в macOS отвечает демон powerd, а инструмент управления - pmset (power management settings). Это не просто переключатель таймеров: pmset пишет настройки в NVRAM/конфиг и одновременно показывает живое состояние подсистемы питания через I/O Kit.
Начни всегда с просмотра. Флаг -g (get) без аргумента показывает активный профиль:
Код: Выделить всё
$ pmset -g
System-wide power settings:
Currently in use:
standby 1
Sleep On Power Button 1
hibernatemode 3
ttyskeepawake 1
displaysleep 10
sleep 1 (sleep prevented by powerd)
disksleep 10
powernap 1
Профили у ноута разные для розетки и батареи. Смотри их раздельно:
Код: Выделить всё
$ pmset -g custom
Battery Power:
displaysleep 2
sleep 5
powernap 0
AC Power:
displaysleep 10
sleep 0
powernap 1
Менять настройки - через sudo и селектор аудитории: -b (battery), -c (charger/AC), -a (all), -u (UPS). Несколько ключей за один вызов:
Код: Выделить всё
$ sudo pmset -c displaysleep 15 disksleep 0 sleep 0
$ sudo pmset -b displaysleep 3 sleep 8

Сон на Apple Silicon: почему glassbox, а не hibernate
На Intel-маках было три классических режима: hibernatemode 0 (RAM под питанием, мгновенное пробуждение, но при потере питания всё теряется), 25 (полный дамп RAM на диск в sleepimage и обесточивание памяти - медленно, зато переживает разряд) и 3 (гибрид: RAM и под питанием, и сдублирован на диск). Дефолт - 3.
На Apple Silicon картина другая, и это важно понять. Чип M-серии не "выключается" в привычном смысле - он уходит в сверхнизкое энергопотребление, оставаясь по сути всегда подзапитанным (тот самый "always on", из-за которого включение мгновенное, а Find My и уведомления работают). Поэтому agressive-hibernate в стиле Intel тут не нужен и переключение hibernatemode на Apple Silicon во многом декоративно: система сама решает, когда сбросить состояние в хранилище. Не пытайся "ускорить сон mac" ручным выставлением hibernatemode 25 на M-чипе - выигрыша по батарее почти нет, а лишние записи на SSD ты получишь.
За глубокий сон отвечает standby и пара задержек:
Код: Выделить всё
$ pmset -g | grep -iE 'standby|hibernate'
standby 1
standbydelaylow 10800
standbydelayhigh 86400
hibernatemode 3
Что не даёт уснуть: sleep assertions
Главный практический инструмент диагностики "почему Mac не засыпает / просыпается сам" - это ассершены (power assertions). Любой процесс через I/O Kit может заявить "не спи, я работаю". pmset показывает их:
Код: Выделить всё
$ pmset -g assertions
2026-06-15 10:42:11 +0300
Assertion status system-wide:
PreventUserIdleSystemSleep 1
PreventUserIdleDisplaySleep 1
PreventSystemSleep 0
Listed by owning process:
pid 533(coreaudiod): [..] PreventUserIdleSystemSleep "audio is active"
pid 1187(Google Chrome): [..] PreventUserIdleDisplaySleep "playing video"
Связанная команда - pmset -g log (история событий сна/пробуждения с причинами Wake reason) и pmset -g everything для полного дампа. Если Mac будит себя ночью, в логе увидишь строки вида Wake from Standby due to RTC (плановое пробуждение по таймеру, например Power Nap) или из-за сети.
caffeinate: бодрствовать ровно сколько надо
Раз ассершены - это родной механизм, то и держать систему бодрой надо им, а не "пошевелить мышкой". Для этого есть caffeinate - он создаёт ассершены под капотом. Флаги собираются как кубики:
- -d - не давать гаснуть дисплею
- -i - не давать системе уснуть по простою (idle)
- -m - не парковать диск
- -s - не давать системе уснуть совсем (работает только на AC-питании)
- -u - объявить пользователя активным (если экран погас - включит его), по умолчанию на 5 секунд
- -t N - держать ассершен N секунд и снять
- -w PID - держать, пока жив процесс с этим PID
Код: Выделить всё
$ caffeinate -i make release
Код: Выделить всё
$ caffeinate -i -w 4471
Код: Выделить всё
$ caffeinate -i -t 3600
Батарея: циклы, состояние, оптимизированная зарядка
"Здоровье" батареи - это не магия, а измеримые параметры. Циклы и состояние из терминала:
Код: Выделить всё
$ system_profiler SPPowerDataType | grep -A4 "Health Information"
Health Information:
Cycle Count: 247
Condition: Normal
Maximum Capacity: 91%
Оптимизированная зарядка (Optimized Battery Charging) - система учит твой график и придерживает заряд на 80%, дозаряжая до 100% к моменту, когда ты обычно отключаешься. Плюс на современных Mac есть лимит зарядки 80% (Battery -> Charging) для тех, кто постоянно в розетке. Это снижает износ лучше любых сторонних утилит. Не гоняй батарею искусственно "для калибровки" - на литий-полимере это вредит, а не помогает.
Обслуживание: periodic ушёл, паника не нужна
Теперь главный миф. Раньше macOS прогоняла периодические скрипты /etc/periodic/daily|weekly|monthly - ротация логов, чистка временных каталогов. Их запускал launchd (не cron - в macOS cron давно вытеснен launchd), а ты мог дёрнуть руками через sudo periodic daily.
Важная новость 2026: начиная с macOS 15 и в macOS 26 Tahoe команда periodic и эти скрипты удалены. И это не повод бежать ставить "клинер". Работу периодики давно перехватили специализированные демоны: ротацией и чисткой логов занимается logd (унифицированная система логов в /var/db/diagnostics, а не текстовые файлы), временные каталоги чистит сама система, кэши пересобираются по требованию. Mac обслуживает себя сам - в фоне, в том числе используя короткие пробуждения Power Nap.
Что реально стоит уметь делать руками:
1. Посмотреть логи. Текстовых /var/log почти не осталось, всё в unified log:
Код: Выделить всё
$ log show --predicate 'eventMessage CONTAINS "Wake"' --last 2h --info
2. Переиндексировать Spotlight через mdutil, когда поиск "сломался" (не находит файлы, грузит CPU процессом mds/mdworker). Статус по всем томам:
Код: Выделить всё
$ mdutil -sa
/System/Volumes/Data:
Indexing enabled.
Код: Выделить всё
$ sudo mdutil -E /
3. Обновлять систему и прошивку. На Apple Silicon прошивка (firmware/iBoot/recovery) обновляется только вместе с обновлением macOS - отдельных firmware-updater'ов нет. Проверить и поставить из терминала:
Код: Выделить всё
$ softwareupdate --list
$ sudo softwareupdate -ia --restart
Типичные грабли
- Ставить hibernatemode 25 на Apple Silicon "чтобы экономить батарею". Выигрыша почти нет, а износ SSD растёт.
- Будить мышкой/скриптом-кликером вместо caffeinate. Это костыль, который ломается. Ассершен - правильный путь.
- Думать, что -s у caffeinate всегда работает. На батарее он молчит. Нужна гарантия - в розетку.
- Искать "почему не спит" наугад. Ответ почти всегда в pmset -g assertions - там написана причина.
- Ставить "клинеры" ради чистки кэшей и запуска "maintenance scripts". В Tahoe этих скриптов уже нет, система чистит сама, а агрессивная чистка кэшей только заставит их пересобираться.
- Путать disksleep с реальной экономией на SSD - он про парковку HDD, на флеше эффект почти нулевой.
- Выведи pmset -g и pmset -g custom. Найди свои значения displaysleep/sleep для AC и батареи, объясни их вслух.
- Запусти долгую безобидную команду под кофеином: caffeinate -i sleep 120. В другом окне сделай pmset -g assertions и найди процесс caffeinate с его ассершеном.
- Открой вкладку с видео в браузере и снова глянь pmset -g assertions - увидишь PreventUserIdleDisplaySleep. Закрой вкладку - ассершен пропадёт.
- Посмотри состояние батареи: system_profiler SPPowerDataType | grep -A4 "Health". Запиши Cycle Count и Maximum Capacity.
- Глянь статус Spotlight: mdutil -sa. Реиндексировать на учебной машине не обязательно - просто прочитай статус.
- Прочитай журнал пробуждений: log show --predicate 'eventMessage CONTAINS "Wake reason"' --last 6h.
- Чем caffeinate -s отличается от -i и в каком случае -s не сработает?
- Где в выводе pmset искать ответ на вопрос "какой процесс не даёт Mac уснуть" и как туда добраться одной командой?
- Почему ручная установка hibernatemode 25 на Apple Silicon - плохая идея?
- Что в macOS Tahoe заменило периодические maintenance-скрипты и почему "клинер" для их запуска не нужен?
Питанием рулит pmset: -g читает, -g assertions вскрывает виновника бессонницы, -c/-b правят профили для сети и батареи. Бодрствование держи через caffeinate, привязывая его к команде или PID, а не клик-костылями. Сон на Apple Silicon - это "always on" с задержками standby, hibernatemode там трогать незачем. Батарея измеряется циклами и Maximum Capacity, а оптимизированная зарядка бережёт её лучше утилит. И главное: periodic в Tahoe больше нет, система обслуживает себя сама через logd и фоновые демоны - твоя реальная работа сводится к чтению логов через log show, редкой переиндексации Spotlight через mdutil и установке обновлений, которые заодно несут прошивку. Никаких клинеров.