#Как распознать проблему и где применимы действия
Нужно собрать журналы неработающей службы для диагностики или обращения в поддержку так, чтобы не раскрыть пароли, токены, адреса клиентов и содержимое приватных файлов. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.
#Возможные причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Собраны записи не того запуска | Номер загрузки и имя службы не указаны | Выбрать -b и -u с точным именем |
| У журнала ограничен доступ | Пользователь видит No entries или часть событий | При необходимости выполнить просмотр с полномочиями администратора |
| Лог содержит конфиденциальные данные | В записях присутствуют URL с токенами и параметры приложения | Очистить копию перед отправкой, оригинал сохранить локально |
#Пошаговая диагностика и исправление
- Шаг 1. Проверьте точное имя службыНайдите service из systemctl; если неизвестно имя, выполните list-units и запишите его целиком. Не собирайте весь системный журнал, когда проблема у одной службы.Linux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
systemctl list-units --type=service --all --no-pager | head -n 65
- Шаг 2. Запишите текущее состояниеstatus покажет основной код отказа, PID и последние строки. Если состояние inactive без failed, это может быть штатный oneshot — проверьте Type и ExecMainStatus.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
UNIT='имя.service'; systemctl show "$UNIT" -p ActiveState -p SubState -p Result -p ExecMainStatus
- Шаг 3. Выберите загрузку и интервалКоманда -b относится к текущей загрузке, --since ограничивает время, -o short-iso даёт дату и пояс; если сбой произошёл вчера, выберите -b -1 и уточните интервалы. В журнале могут находиться секреты.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
UNIT='имя.service'; journalctl -b -u "$UNIT" --since '2 hours ago' -o short-iso --no-pager
- Шаг 4. При необходимости используйте административный просмотрЕсли вывода нет или показаны ограничения прав, проверьте журнал с sudo. Не добавляйте себя в привилегированные группы ради одного обращения и не публикуйте весь журнал. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаНужен sudoТерминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
UNIT='имя.service'; sudo journalctl -b -u "$UNIT" --since '2 hours ago' --no-pager -o short-iso
- Шаг 5. Сохраните локальную копию с закрытым доступомУбедитесь, что есть свободное место; umask 077 даёт файлу права только владельца. Копию сохраняйте в домашней папке, отдельно от публичного каталога сайта.Linux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
umask 077UNIT='имя.service'; journalctl -b -u "$UNIT" --since '2 hours ago' --no-pager -o short-iso > "$HOME/service-diagnostic.log"
- Шаг 6. Проверьте и обезличьте копиюПеред отправкой откройте копию в редакторе и удалите пароли, токены, приватные пути, адреса пользователей. Не передавайте закрытые ключи и файлы EnvironmentFile. Для проверки локальной копии используйте stat.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
stat -c '%A %U %s %n' "$HOME/service-diagnostic.log"wc -l "$HOME/service-diagnostic.log"
#Как проверить, что проблема действительно устранена
Приложите к обращению версию ОС, имя службы и обезличенные записи вокруг одного сбоя. Если за предыдущую загрузку журналы не сохранились, не заявляйте об их наличии; настройку постоянного журнала обсуждайте с администратором.
#Если результат не получен
Вернитесь к самому раннему отличающемуся результату диагностики и проверьте точный текст ошибки, текущую загрузку и фактическую версию программы. Не повторяйте опасную команду с другими правами наугад. Если это рабочий сервер, передайте администратору обезличенные отрывки журнала за момент сбоя и уже выполненные действия.