Эта страница поможет понять, что происходит на самом устройстве: дошёл ли push, обращалось ли устройство к серверу за командами, почему не устанавливается профиль, работает ли агент. Сервер знает только о тех запросах, которые до него дошли, а устройство записывает, что оно пыталось сделать и чем это закончилось. Большинство команд на странице требуют прав администратора (
sudo).
profiles status -type enrollment # зарегистрирован ли Mac в MDM
sudo profiles list # установленные профили
launchctl print system/com.ringo.agent | grep -E 'state|pid =' # запущен ли агент
Ожидаемый результат первой команды:
Enrolled via DEP: No
MDM enrollment: Yes (User Approved)
MDM server: https://<домен>/mdm/connect
| Результат | Что это значит | Где решение |
|---|---|---|
MDM enrollment: No |
Профиля MDM нет или регистрация не завершилась. | Причина ошибки установки профиля, Регистрация |
MDM enrollment: Yes без (User Approved) |
Пользователь не одобрил MDM, поэтому часть профилей и команд macOS не применится. | Попросите пользователя одобрить MDM: Системные настройки → Основные → Управление устройством. |
В строке MDM server: другой адрес |
Mac зарегистрирован на старый домен или на другой сервер. | Сервер → смена домена |
В выводе profiles list нет com.ringo.mdm |
Профиля Ринго нет, Mac не управляется. | Зарегистрируйте Mac заново. |
Агент в состоянии state = not running или службы нет |
Агент не установлен или не запускается. | Агент Ринго |
Те же сведения доступны в интерфейсе: Системные настройки → Основные → Управление устройством. У зарегистрированного Mac там указаны «MDM Enroll Profile» и «RINGO Agent Configuration Profile»:

Если команды остаются в статусе «В очереди», чаще всего не доходят push. На Mac это можно проверить напрямую:
sudo /System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status > /tmp/aps.txt
grep -A12 '^connection environment: *production' /tmp/aps.txt | grep -E 'connection status|server hostname|server port|courier status'
grep -A40 'mdmclient.daemon.push.production' /tmp/aps.txt | grep -E 'topic:|last incoming push|total incoming'
connection status: Yes
server hostname: 27-courier.push.apple.com
server port: 5223
courier status: Connected
total incoming push notifications: 1
last incoming push notification: Oct 13, 2026 at 1:53:43 PM (9.58 seconds ago)
topic: com.apple.mgmt.External.4ae2421d-…
Команда
apsctl statusвыводит сведения о нескольких окружениях. Блокdevelopmentв начале вывода всегда пустой («no eligible topics») — это нормально. Нужные сведения находятся в блокеproduction.
Как читать результат:
connection status: Yes и courier status: Connected означают, что Mac подключён к Apple. Если указано No, порты 5223 и 443 к 17.0.0.0/8 закрыты или прокси расшифровывает TLS (см. Сеть → от устройств до Apple).topic должен совпадать с полем «Идентификатор» в разделе Настройки → Сертификат APNS. Если они различаются, APNs-сертификат был создан заново, а не продлён (см. Команды MDM → APNs).last incoming push сравните с полем «Дата последней отправки push-нотификации» в карточке устройства.| Сервер отправил push | Mac получил push | Вывод |
|---|---|---|
| 13:53 | 13:53 | Push работает. Выясните, почему Mac не обратился за командой (см. ниже). |
| 13:53 | Раньше 13:53 или ни разу | Push не дошёл: проблема на пути от Apple до Mac или идентификатор не совпадает. |
| Давно или ни разу | — | Сервер не отправляет push: проверьте APNs-сертификат и связь сервера с Apple (см. Команды MDM → шаг 3). |
Чтобы проверить доставку целиком, нажмите в карточке устройства на вкладке Управление → Команды кнопку Отправка пустого Push, а затем снова выполните apsctl status. Время last incoming push должно смениться на текущее в течение нескольких секунд.
События MDM на Mac записывает подсистема com.apple.ManagedClient. Без фильтра журнал практически непригоден для анализа: за два часа в нём набираются десятки тысяч строк. Используйте следующие выборки:
| Задача | Команда |
|---|---|
| Коды ответов сервера на каждый запрос Mac | log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND category == "HTTPUtil" AND eventMessage CONTAINS "Received HTTP response"' |
| Ключевые события MDM: push, запросы сервера, установка профилей | log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND eventMessage CONTAINS "[*]"' |
| Только ошибки MDM, профилей и SCEP | log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND messageType == error' |
| Подробная работа службы MDM | log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND category == "MDMDaemon"' |
| Получение сертификата при регистрации (SCEP) | log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND category == "SCEP"' |
| Наблюдение в реальном времени: запустите команду, затем отправьте команду из Ринго | log stream --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND category == "MDMDaemon"' |
| Установка обновлений ОС через MDM | log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND category == "OSUpdate"' |
| Соединение с сервисом push Apple (много записей) | log show --last 10m --style compact --predicate 'process == "apsd" AND category == "courier"' |
Вместо --last 1h можно задать точный интервал, например --start "2026-10-13 13:31:00" --end "2026-10-13 13:33:00" (по местному времени Mac). Запускайте команды через sudo, иначе часть записей будет скрыта.
Mac получил push, обратился к серверу и выполняет команды (строки сокращены):
13:31:53 mdmclient [com.apple.ManagedClient:MDMDaemon] [*] APS: Received push message for topic: com.apple.mgmt.External.4ae2421d-…
13:31:53 mdmclient [com.apple.ManagedClient:MDMDaemon] Calling MDM_Connect (At login: no) <PushNotification> for: https://<домен>/mdm/connect
13:31:54 mdmclient [com.apple.ManagedClient:MDMDaemon] [*] Processing server request: InstallProfile for: <Device> (a81c22fa-…)
13:31:54 mdmclient [com.apple.ManagedClient:MDMDaemon] [*] === CPF_InstallProfile === com.ringo.agent.configuration (user: <Computer>) (source: 'MDM')
13:31:56 mdmclient [com.apple.ManagedClient:MDMDaemon] [*] Processing server request: SecurityInfo for: <Device> (b99f4c57-…)
Значение в скобках после Processing server request — это UUID команды. По нему команду можно найти в логе backend.
| Что есть в журнале | Что это значит |
|---|---|
После отправки команды нет записи APS: Received push message |
Push не дошёл (см. Проверка доставки push). |
Есть Received push, но нет Calling MDM_Connect |
mdmclient не стал обращаться к серверу: например, профиль MDM удалён или у Mac пропала сеть. |
Есть Calling MDM_Connect, но нет Processing server request |
Mac не получил команду из-за ошибки соединения с сервером. Найдите её с помощью выборки messageType == error. |
Есть Processing server request: X, а затем [ERROR] … [ErrorChain.0] (X) [Домен:код] текст |
Mac получил команду и отказался её выполнить. Этот же текст показан в Ринго под значком «?». |
Пример отказа:
[ERROR] [0:MDMDaemon] [ErrorChain.0] (ActivationLockBypassCode) [MCMDMErrorDomain:12085] Не удалось завершить операцию. (MCMDMErrorDomain, ошибка 12085)
Журнал записывает код ответа сервера на каждый запрос Mac и тип запроса:
<<<<< Received HTTP response (200) [MDM_Authenticate] <<<<<
<<<<< Received HTTP response (200) [MDM_TokenUpdate] <<<<<
<<<<< Received HTTP response (200) [Idle] <<<<<
<<<<< Received HTTP response (200) [Acknowledged(InstallProfile):a81c22fa-2ba9-47bb-ab9b-e40bb3bcc484] <<<<<
<<<<< Received HTTP response (200) [Error(ActivationLockBypassCode):a04ae012-7acd-47a0-b6d7-4026a88d55f5] <<<<<
<<<<< Received HTTP response (200) [SCEP:GetCACaps] <<<<<
Эти записи позволяют точно определить, где проблема — на сервере или в сети:
| Код в журнале Mac | Кто ответил | Где решение |
|---|---|---|
200 |
Ринго принял запрос. | Проблема не в сети. |
401 или 400 с JSON от Ринго (запрос есть в логе backend) |
Ринго отклонил запрос: устройство не зарегистрировано или подпись неверна. | Регистрация |
403 или 406 |
WAF или ACL прокси. | Сеть → WAF |
413 |
Превышен лимит размера запроса на прокси или WAF (ответы ProfileList и InstalledApplicationList бывают большими). |
Сеть → reverse proxy |
502, 503 или 504 |
Прокси не может подключиться к backend. | Сервер |
После Sending HTTP request нет записи Received HTTP response |
Ответ не получен: таймаут, обрыв соединения или DPI. | Найдите ошибку с помощью выборки messageType == error. |
Если на Acknowledged(X) получен ответ 200, а в Ринго команда X так и не перешла в статус «Выполнено», ответ, вероятно, вернул не Ринго, а промежуточный узел (например, прокси со страницей-заглушкой и кодом 200). Найдите UUID команды в логе backend: если записи нет, запрос до Ринго не дошёл.
Регистрация — это установка enroll-профиля в несколько этапов: сертификат удостоверяющего центра Ринго, затем получение сертификата устройства по SCEP, затем настройка MDM и сообщения Authenticate и TokenUpdate серверу. Успешная установка заканчивается такими строками:
[*] === CPF_InstallProfile === com.ringo.mdm (user: <Computer>) (source: 'Manual')
Installed configuration profile: MDM Enroll Profile (com.ringo.mdm:…) for <Computer> (Source: Manual)
Sending TokenUpdate for topic: com.apple.mgmt.External.… with PushMagic: … token length: 80
Если установка не удалась, найдите причину выборкой messageType == error (см. Системный журнал). Частые ошибки:
| Ошибка в журнале | Причина | Где решение |
|---|---|---|
NSURLErrorDomain Code=-1001 (таймаут), «SCEP‑сервер … был недоступен или не отвечал» |
/scep недоступен из сети Mac, сервер не отвечает или связь прервалась. |
Регистрация → шаг 2, Сеть |
NSURLErrorDomain Code=-1200 … -1204 |
Ошибка TLS: соединение не установлено, сертификат истёк, не доверенный, корень неизвестен или время неверное. | Сеть → TLS-сертификат |
NSURLErrorDomain Code=-1003 или -1004 |
DNS не находит сервер или порт закрыт. | Сеть → DNS |
Сервер ответил кодом 402 на /mdm/enroll/profile (видно в логе backend) |
Исчерпана лицензия. | Регистрация → лицензия |
Расшифровка всех сетевых кодов macOS приведена в справочнике ошибок.
launchctl print system/com.ringo.agent | grep -E 'state|pid =|last exit'
ls -lt /Library/Logs/com.ringo.agent/
Затем откройте лог за нужный день, подставив дату в формате ГГГГ-ММ-ДД (время в логе указано в UTC):
tail -50 /Library/Logs/com.ringo.agent/ringo.<ГГГГ-ММ-ДД>.0.log
Расположение файлов агента:
| Файл | Содержимое |
|---|---|
/Library/Logs/com.ringo.agent/ringo.ГГГГ-ММ-ДД.0.log |
Основной лог, отдельный файл на каждые сутки, время в UTC. |
/Library/Logs/com.ringo.agent/ringo.agent.err, ringo.agent.out |
Вывод службы. Проверяйте, если агент завершается при запуске. |
/Library/LaunchDaemons/com.ringo.agent.plist |
Описание службы launchd. |
/usr/local/bin/ringo/agent, /usr/local/bin/ringo/uninstall.sh |
Агент и скрипт его удаления. |
Успешное подключение агента в логе:
2026-10-13 10:32:00 | LOG - socket status change [connecting, 2]
2026-10-13 10:32:01 | LOG - socket connected
2026-10-13 10:32:01 | LOG - Changing status: connected
2026-10-13 10:32:01 | LOG - Auth verified successfully
| Запись в логе агента | Что это значит | Что делать |
|---|---|---|
Agent configuration not found, waiting for configuration profile.. |
Нет профиля «RINGO Agent Configuration Profile», агенту неизвестны параметры подключения. | Профиль доставляется MDM-командой после регистрации. Проверьте канал MDM (см. Команды MDM). |
socket status change [connecting, …] без последующего connected |
Агент не может подключиться к /socket.io/. |
Связь агента с сервером |
Частые socket disconnect и Changing status: disonnected |
Соединение разрывается. | Связь агента с сервером → шаг 2 |
Connection error, reason: … Authentication error, Changing status: authentication failed |
Сервер отказал агенту в авторизации. Причина в логе агента не указывается. Если вместо Authentication error указан другой текст (например, The Internet connection appears to be offline.), это ошибка сети: строку authentication failed агент пишет при любой ошибке подключения. |
Агент на macOS → шаг 3 |
Downloading failed, response code: 000, Could not resolve host (в логе агента и в результате шага политики в Ринго) |
Точка распространения пакетов недоступна с устройства. | Политики и пакеты → пакеты |
Build id: … |
Номер сборки агента. После обновления Ринго сравните его с другими устройствами. | — |
Чтобы перезапустить агент, выполните sudo launchctl kickstart -k system/com.ringo.agent.
Чтобы проверить сертификаты в системной связке ключей, выполните:
sudo security find-certificate -a /Library/Keychains/System.keychain | grep '"labl"' | grep -i ringo
В выводе должны быть «Ringo Device Identity» (сертификат MDM), «Ringo Agent Device Identity» (сертификат агента) и «Ringo Built-in Certificate Authority». Если «Ringo Agent Device Identity» нет, агент не пройдёт авторизацию. Если сертификатов «Ringo Agent Device Identity» несколько, см. Агент на macOS → несколько сертификатов агента.
Лог приложения находится в ~/Library/Application Support/Logs/app.log в домашней папке пользователя. В нём записаны все запросы к серверу (в виде команды curl) и ответы с кодом и телом:
curl -X GET "https://<домен>/api/v1/self-service/entities?device_type=computer&device_id=…&page=1&limit=20"
Status Code: 200
Response Body: { "count" : 0, "entities" : [ ] }
| Запись в логе | Что это значит |
|---|---|
Status Code: 200, "count" : 0 |
Для устройства ничего не опубликовано. Окно при этом бесконечно показывает индикатор загрузки; это не сбой. |
400, «Ошибка аутентификации: …» |
Self Service не прошёл вход с сертификатом агента («Ringo Agent Device Identity»): сертификата нет или он не совпадает с сервером. |
401, «Неверное имя пользователя или пароль» |
Устройства с таким UDID нет в Ринго. |
| Ошибка соединения или таймаут | Путь /api/v1/self-service недоступен из сети устройства. |

sudo log collect --last 1h --output ~/Desktop/ringo-device.logarchive # системный журнал (открывается в приложении «Консоль»)
sudo cp -R /Library/Logs/com.ringo.agent ~/Desktop/ringo-agent-logs
sudo profiles show -type configuration > ~/Desktop/profiles.txt
profiles status -type enrollment >> ~/Desktop/profiles.txt
sudo /System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status > ~/Desktop/apsctl.txt
cp ~/Library/Application\ Support/Logs/app.log ~/Desktop/selfservice-app.log 2>/dev/null
Что указать в обращении, описано на странице Обращение в поддержку.
Проверено на Ринго 3.0.5, октябрь 2026. Тексты ошибок — Справочник ошибок, термины — Термины.