Файлы и службы

/usr/local/bin/pss

Исполняемый файл.

/opt/pss/config/pss.properties

Глобальные настройки, логи, пути к папкам и др. При внесении изменений перезапустить сервис.

/opt/pss/config/pss.json

Основной файл настроек. Создаётся и обновляется автоматически. При старте сервис пытается загрузить именно его. Устройство файла — раздел Файл настроек pss.json.

/opt/pss/config/pss_last.json

Копия последнего pss.json, который загрузился начисто. Переписывается на каждом старте, где загрузился именно pss.json; старт на запасном файле её не обновляет — иначе она перестала бы быть последней исправной. Служит первым запасным вариантом, если основной файл разобрать не удалось. На узле, ни разу не перезапускавшемся после установки, и там, где каталог настроек закрыт на запись, этого файла нет.

/opt/pss/config/pss_back.json

Резервная копия предыдущей рабочей конфигурации. Создаётся только при восстановлении настроек из ранее сохранённой копии в веб-интерфейсе (Обслуживание) и используется как запасной вариант после pss_last.json. Регулярной резервной копии сервис не ведёт, поэтому на узле, где настройки ни разу не восстанавливали, этого файла нет.

/opt/pss/config/pss_default.json

Файл настроек по умолчанию. Поставляется вместе с пакетом и применяется как последний запасной вариант, если ни pss.json, ни pss_last.json, ни pss_back.json не удалось загрузить. Из него же создаётся рабочий pss.json при самом первом запуске: файл задаёт порт веб-интерфейса 8808 и учётную запись admin / admin.

/opt/pss/config/bad/

Архив повреждённых файлов pss.json. Если при старте основной файл настроек не удалось разобрать, он перемещается сюда с именем вида pss_YYYYMMDD_HHMMSS.json. Каталог создаётся автоматически и не растёт без предела: в нём остаются двадцать файлов с наибольшими именами. Подробнее см. раздел Поведение при старте и ошибках конфигурации.

/opt/pss/data

Папка размещения данных. Создаётся и обновляется автоматически. Может быть изменена в файле глобальных настроек.

/usr/lib/systemd/system/pss.service

systemd-файл службы.

/var/log/pss

Папка записи логов. Может быть изменена в файле глобальных настроек.

Имя службы — pss. Запускается от пользователя pss.

Работу с ключом обеспечивает пакет системы защиты aksusbd — он включает службы hasplmd и aksusbd. Пакет pstreamer объявляет зависимость от него, версии 10.33 или новее: сам он службу защиты не содержит, но лежит с ней в одном репозитории, поэтому менеджер пакетов ставит её вместе с ним. Более старая служба защиты библиотеки поставщика, которые pstreamer кладёт в /var/hasplm, загрузить не может.

Поведение при старте и ошибках конфигурации

При запуске сервис последовательно пытается загрузить файлы настроек из папки /opt/pss/config:

  1. pss.json — основной файл настроек.

  2. pss_last.json — копия последней конфигурации, загрузившейся начисто.

  3. pss_back.json — резервная копия предыдущей рабочей конфигурации.

  4. pss_default.json — настройки по умолчанию, поставляемые вместе с пакетом.

Используется первый успешно загруженный файл. Если все четыре файла отсутствуют или повреждены, сервис стартует с пустыми настройками — в них нет ни одной учётной записи. Администратора в этом случае заводят вручную: остановить сервис, добавить в pss.json запись в web-server.login с ключами id, login и password и запустить сервис снова — правку работающего сервиса он перезапишет из памяти (API или файл настроек).

Из существования pss_last.json следуют две вещи. Первое: удаление pss.json больше не начинает узел с чистого листа — сервис поднимется на pss_last.json и запишет его обратно в pss.json. Аварии при этом не будет, но и незамеченным это не пройдёт: в журнале останется запись, а в веб-интерфейсе — сообщение о запуске. Чтобы действительно сбросить узел, удаляют pss.json вместе с pss_last.json и pss_back.json — тогда сервис поднимется на pss_default.json. Остальное в каталоге настроек трогать нельзя: без pss.properties сервис не стартует вовсе. Второе: pss_last.json хорош ровно настолько, насколько свеж последний чистый старт. Настройки, изменённые через веб-интерфейс и ни разу не пережившие перезапуск, есть только в pss.json, и откат к последней рабочей конфигурации их не сохранит.

Неприемлемый файл настроек. Если pss.json прочитать не удалось, сервис помещает его в архив /opt/pss/config/bad/ с именем pss_YYYYMMDD_HHMMSS.json; дата и время в имени — момент архивации по UTC, тот же отсчёт, что и в журнале по умолчанию. После этого сервис продолжает попытки загрузки в обычном порядке и пересохраняет рабочую конфигурацию в pss.json из того файла, который загрузился. Подробности (имя ключа, описание ошибки, имя файла в архиве) записываются в журнал работы, а путь архива прямо называет и авария о неудачной загрузке.

Загрузку прекращают: синтаксическая ошибка JSON, значение null, неверная форма значения (объект там, где ожидается одиночное значение, и наоборот), число или чужое слово вместо true и false, слишком длинная строка, отсутствующий или повторяющийся идентификатор записи массива, повтор значения, объявленного уникальным. Неизвестный ключ файл не отбрасывает: он игнорируется, в журнал пишется предупреждение с именем секции и ключа, а при следующем сохранении ключ из файла исчезает. Полный разбор того, что сервис принимает при чтении файла и что отвергает, — Что делает служба при чтении файла.

В архив попадает только основной pss.json. Файлы pss_last.json, pss_back.json и pss_default.json при повреждении не архивируются — записей в журнале достаточно для диагностики, а сами файлы остаются на месте и могут быть исправлены вручную.

Если в /opt/pss/config/bad/ уже есть файл с той же меткой времени (например, при двух неудачных стартах в одну и ту же секунду), новый получает номерной суффикс — pss_YYYYMMDD_HHMMSS_2.json и далее; ранее сохранённая копия при этом не теряется. Разрастись каталог не может: появление новой копии оставляет в нём двадцать файлов с наибольшими именами, остальные удаляются. Для архивов, которые сервис именует по времени, это и есть двадцать самых свежих; посторонние файлы, оставленные в каталоге, тоже считаются и занимают эти места, поэтому лишнего в bad/ держать не стоит. Одна неудачная правка — одна копия; сам по себе перезапуск новых копий не создаёт, потому что отвергнутый файл уже перемещён, а на его место записан работающий.

Числовые значения за пределами допустимого диапазона. Если в файле настроек встречается числовое значение меньше минимально допустимого или больше максимально допустимого для этого параметра, сервис не отбрасывает файл целиком. Вместо этого в журнал записывается предупреждение с указанием имени параметра, прочитанного значения и применённой границы, а само значение приводится к ближайшей допустимой границе диапазона (минимуму или максимуму). После завершения загрузки сервис автоматически пересохраняет pss.json с уже скорректированными значениями, поэтому при повторном запуске эти предупреждения уже не появляются.

Кроме журнала, о коррекции сообщает стартовое уведомление службы в веб-интерфейсе: оно называет число приведённых к границе значений и отсылает за подробностями в журнал. Прочитайте его после обновления, сузившего какой-нибудь диапазон: коррекция тихая, а на параметре хранения она означает, что данные за пределами новой границы удалит ближайший проход очистки.

Такое поведение применяется только при первоначальной загрузке файла настроек. При изменении настроек через веб-интерфейс или HTTP API (Управление через HTTP API) значения вне допустимого диапазона по-прежнему отклоняются с ошибкой — без автоматической коррекции.

Отказ при этом не возвращает узел в прежнее состояние: то, что узел успел прочитать до негодного значения, остаётся применённым, и сообщение об отклонённом сохранении не значит, что не изменилось ничего (Как приходят ошибки).

Правка файла вручную, проверка по схеме и перенос настроек на другой узел или другую версию — Файл настроек pss.json и Правка, проверка и перенос настроек.