---
title: Файлы и службы
url: https://doc2.pstreamer.tv/ru/manual/install/files.html
lang: ru
product: Perfect Streamer
version: 2.0.2.362
---

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

****/usr/local/bin/pss****
  Исполняемый файл.
****/opt/pss/config/pss.properties****
  Глобальные настройки, логи, пути к папкам и др. При внесении изменений перезапустить сервис.
****/opt/pss/config/pss.json****
  Основной файл настроек. Создаётся и обновляется автоматически. При старте сервис пытается загрузить именно его. Устройство файла — раздел [Файл настроек pss.json](../extras/config_file.md#extras-config-file).
****/opt/pss/config/pss_last.json****
  Копия последнего *pss.json*, который загрузился начисто. Переписывается на каждом старте, где загрузился именно *pss.json*; старт на запасном файле её не обновляет — иначе она перестала бы быть последней исправной. Служит первым запасным вариантом, если основной файл разобрать не удалось. На узле, ни разу не перезапускавшемся после установки, и там, где каталог настроек закрыт на запись, этого файла нет.
****/opt/pss/config/pss_back.json****
  Резервная копия предыдущей рабочей конфигурации. Создаётся только при восстановлении настроек из ранее сохранённой копии в веб-интерфейсе ([Обслуживание](../webui/administration.md#webui-maintenance)) и используется как запасной вариант после *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 или файл настроек](../extras/api.md#extras-api-vs-file)).

Из существования *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*, слишком длинная строка, отсутствующий или повторяющийся идентификатор записи массива, повтор значения, объявленного уникальным. **Неизвестный ключ файл не отбрасывает:** он игнорируется, в журнал пишется предупреждение с именем секции и ключа, а при следующем сохранении ключ из файла исчезает. Полный разбор того, что сервис принимает при чтении файла и что отвергает, — [Что делает служба при чтении файла](../extras/config_file.md#extras-config-file-reading).

В архив попадает только основной *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](../extras/api.md#extras-api)) значения вне допустимого диапазона по-прежнему отклоняются с ошибкой — без автоматической коррекции.

Отказ при этом не возвращает узел в прежнее состояние: то, что узел успел прочитать до негодного значения, остаётся применённым, и сообщение об отклонённом сохранении не значит, что не изменилось ничего ([Как приходят ошибки](../extras/api.md#extras-api-results)).

Правка файла вручную, проверка по схеме и перенос настроек на другой узел или другую версию — [Файл настроек pss.json](../extras/config_file.md#extras-config-file) и [Правка, проверка и перенос настроек](../extras/config_editing.md#extras-config-editing).
