• RestFS — компонент, обеспечивающий HTTP API для работы с файлами.
  • GlusterFS — распределенная файловая система, обеспечивающая надежное хранилище (необязательный компонент для систем без резервирования).

На уровне системы существует реестр кластеров RestFS, с которыми может работать система.
По умолчанию в реестре кластеров RestFS есть кластер default, который отображается в URL: http://system.restfs.ecss:9990

Имя кластера RestFS может быть любым, кроме system, а так же не может начинаться на:

  • "http://";
  • "https://";
  • "ftp://";
  • "file://".

Кластер RestFS с именем default не может быть удален.

На уровне системы команды по управлению/мониторингу RestFS располагаются по пути /restfs.

На уровне виртуальной АТС — /domain/<DOMAIN>/restfs/.

Настройки RestFS для одной ноды

Для запуска RestFS в режиме одной ноды достаточно поставить пакет ecss-restfs. В ходе установки буден задан ряд вопросов. Далее, нужно запустить и проверить состояние сервиса restfs.

sudo apt install ecss-restfs
sudo systemctl start ecss-restfs.service
sudo systemctl status ecss-restfs.service

По умолчанию сервис ожидает HTTP-запросы на порту 9990 и работает с каталогом /var/lib/ecss/restfs.

Настройки RestFS для кластера на базе glusterfs-сервера

Для того чтобы обеспечить репликацию данных между серверами кластера, необходимо настроить glusterfs-server.

В качестве примера приведена система ECSS-10, работающая в кластере, со следующими настройками:

  • IP-адрес ecss1 — 192.168.1.21;

  • IP-адрес ecss2 — 192.168.1.22.

  1. Установите gluster-сервер и пакет attr на оба хоста:

    sudo aptitude install glusterfs-server attr
  2. Для добавления сервера в пул файловых хранилищ выполните команду на ecss1:

    sudo gluster peer probe 192.168.1.22

    После этого на ecss2 при выполнении команды  sudo gluster peer status должна появиться информация о ecss1:

    Number of Peers: 1 Hostname: 192.168.1.21 Uuid: 569c4730-a3a7-4d29-a132-b1bcdad792d8 State: Peer in Cluster (Connected)
  3. Для создания кластера на ecss1 выполните команду:

    sudo gluster volume create ecss_volume replica 2 transport tcp 192.168.1.21:/var/lib/ecss/glusterfs 192.168.1.22:/var/lib/ecss/glusterfs force
  4. Запустите созданный кластер, для этого на ecss1 выполните команду:

    sudo gluster volume start ecss_volume
  5. Для проверки статуса кластера на ecss1 выполните команду:

    sudo gluster volume info

    Необходимо обратить внимание на поля "Status" и "Bricks" — они должны иметь следующий вид:

    Volume Name: ecss_volume
    Type: Replicate
    Volume ID: b9209b1f-be3e-4954-b32f-2364b0202989
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: 192.168.1.21:/var/lib/ecss/glusterfs
    Brick2: 192.168.1.22:/var/lib/ecss/glusterfs
    Options Reconfigured:
    cluster.granular-entry-heal: on
    storage.fips-mode-rchecksum: on
    transport.address-family: inet
    nfs.disable: on
    performance.client-io-threads: off
  6. Чтобы смонтировать glusterfs раздел, выполните на обоих хостах ecss1 и ecss2 следующие действия:

    • Создайте новый systemd unit:

      /etc/systemd/system/ecss-glusterfs-mount.service

      и добавьте туда следующие параметры:

      [Unit] 
      Description=mount glusterfs 
      After=network.target 
      Requires=network.target 
      
      [Service] 
      RemainAfterExit=no 
      Type=forking 
      RestartSec=10s 
      Restart=always 
      ExecStart=/sbin/mount.glusterfs localhost:/ecss_volume /var/lib/ecss/restfs -o fetch-attempts=10 
      ExecStop=/bin/umount /var/lib/ecss/restfs 
      
      [Install] 
      WantedBy=multi-user.target
    • Добавить Unit в автозагрузку следующими командами:

      sudo systemctl enable glusterd.service

      sudo systemctl enable ecss-glusterfs-mount.service
    • Перезагрузить хост:

      sudo reboot

      Если хост не может быть перезагружен, то можно выполнить следующие команды:

      sudo systemctl daemon-reload
      sudo systemctl restart ecss-glusterfs-mount.service

      После монтирования на обоих хостах выполните команду:

      df -h

      При просмотре информации должен появиться подмонтированный раздел:

      /dev/sda10                     19G  6,5G   11G  38% /var/lib/mysql
      /dev/sda8                     4,5G  213M  4,1G   5% /var/log
      /dev/sda5                      37G   48M   35G   1% /var/lib/ecss/ecss-media-server/records
      /dev/sda6                      19G   44M   18G   1% /var/lib/ecss/cdr
      /dev/sda7                      19G   44M   18G   1% /var/lib/ecss/statistics
      /dev/sda9                      19G  7,6G  9,7G  44% /var/log/ecss
      localhost:/ecss_volume   	 46G   59M   44G   1% /var/lib/ecss/restfs*

      После настройки glusterfs необходимо переустановить пакет ecss-media-resources:

      sudo apt install --reinstall ecss-media-resources

Запуск RestFS в режиме кластера

Для запуска RestFS в режиме кластера достаточно, чтобы пакет ecss-restfs был установлен и запущен сразу на двух нодах. Команда для запуска сервиса ecss-restfs: 

sudo systemctl start ecss-restfs.service

Запуск RestFS в случае недоступности других участников кластера

В применяемой концепции glusterfs все сервера равнозначны. Однако раздел volume не активируется при отсутствии кворума (кластер имеет кворум при наличии и активности достаточного количества голосующих элементов кластера с одинаковым согласованным представлением кластера). Это защитный механизм, который характерен для всех распределенных отказоустойчивых систем и призван защитить систему от split-brain — ситуация, когда каждая система считает, что другая нода вышла из строя.
Такая ситуация может возникнуть когда загружается только один из серверов, а второй при этом выключен или недоступен. На первом сервере volume не будет автоматически активирован до появления второго сервера для исключения расхождения данных.

Если включение второго сервера невозможно либо затягивается на длительное время, то можно вручную перевести volume в рабочий режим, выполнив команду:

sudo gluster volume ecss_volume start force

Проблемы связанные с возникновением split-brain

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

Для того чтобы решить данную проблему, потребуется воспользоваться ключом cluster.favorite-child-policy. При его включении все файлы, находящиеся в сплите, будут автоматически синхронизированы между собой по заданному правилу.

Включение данного параметра производится командой:

sudo gluster volume set ecss_volume cluster.favorite-child-policy size

Сервис фоновой конвертации записанных разговоров в MP3

Описание

Сервис запускается в определенное время и конвертирует файлы с расширением "wav" в "mp3". Для конвертации используется приложение ffmpeg.

Настройка

Управление сервисом осуществляется командой dpkg reconfigure ecss-restfs, где в ходе настройки пакета задаётся соответствующий вопрос о требовании включения конвертации записей.

Настройку через конфигурационные файлы следует использовать только в том случае, если вы точно знаете, что делаете. Для настройки сервиса необходимо выставить нужные опции в файле /etc/ecss/ecss-restfs/crawler.json:

Настройка Пути

"dirs": {
    "workdir": "/var/lib/ecss/restfs",
    "excluded": [
      "system",
      "domain/*/asr",
      "domain/*/sounds"
    ]
  },
  • dirs.workdir — папка, относительно которой производится поиск аудиофайлов (рабочая папка restfs);
  • dirs.excluded — папки, которые исключаются из поиска;

Настройка конвертации

Файл содержит параметры, передаваемые конвертору:

  "files": {
    "wav": {
      "enabled": "true",
      "opt": "-v 0 -y",
      "convert": "-vn -ab 192 -ac 1",
      "ext": "mp3"
    },
    "pcm": {
      "opt": "-f s16le -ar 8k -ac 1  -v 0 -y",
      "convert": "",
      "ext": "wav"
    }
  • files.wav — описание правил конвертации wav-файлов;
  • files.wav.enabled — флаг, показывающий включена ли конвертация wav в mp3;
  • files.wav.opt — опции для ffmpeg, с которыми запускается конвертация для wav-файлов;
  • files.wav.convert — команда для ffmpeg для конвертации wav-файла;
  • files.wav.ext — расширение, с которым сохраняется конвертированный файл;
  • files.pcm — описание правил конвертации pcm-файлов;
  • files.pcm.opt — опции для ffmpeg, с которыми запускается конвертация для pcm-файлов;
  • files.pcm.convert — команда для ffmpeg для конвертации pcm-файла;
  • files.pcm.ext — расширение, с которым сохраняется конвертированный файл.
  • opt — опции для входного файла;
  • convert — опции для выходного файла (конвертированного).


    "transcribe": {
        "enabled": "false",
        "statistics": "false",
        "ext": "vtt" 
    }
  • transcribe — описание для транскрибирования (распознавания сохраненных записей разговоров);
  • transcribe.enabled — флаг, показывающий включено ли транскрибирование;
  • transcribe.statistics — флаг, показывающий включен ли подсчет количества распознанных файлов за один запуск транскрибирования;
  • transcribe.ext — расширение, с которым сохраняется распознанный результат (по умолчании vtt — файл субтитров).

Таймер

/lib/systemd/system/ecss-restfs-crawler.timer

По умолчанию конвертация запускается ежедневно в 00:00. Пример настроек:

sasha@ecss1:~$ sudo systemctl cat ecss-restfs-crawler.timer 
# /lib/systemd/system/ecss-restfs-crawler.timer
[Timer]
OnCalendar=00:00

[Unit]
Description=Run conversion every day in 00:00

[Install]
WantedBy=multi-user.target

где:

  • Поле OnCalendar — содержит время запуска.

Изменить настройки таймера можно с помощью команды:

sudo systemctl edit ecss-restfs-crawler.timer

Синтаксис настройки таймера приведен в документации по команде man systemd.timer. 

Права

/lib/systemd/system/ecss-restfs-crawler.service

Данный файл содержит следующие параметры:

  • Пользователь, от чьего имени выполняется сервис (User, Group);
  • Права на новые файлы (Umask);
  • Время жизни сервиса (RuntimeMaxSec);
  • Ограничение на ресурсы (CPUQuaota, Nice).

Настройка сервиса tts для работы с Yandex-Speechkit (Text-to-Speech)

TtS (Text-to-Speech) — сервис синтеза речи, работающий с Yandex-Speechkit , позволяющий озвучить любой текст на нескольких языках.

Настройка в Yandex Облако

Для корректной работы tts (Text-to-Speech) через Yandex сервис требуются выполнить следующие шаги:

  • Создать новый аккаунт или авторизоваться в существующем аккаунте Яндекс.Облако;
  • Выполнить действия согласно документации Yandex-Speechkit для получения OAuth-токена;
  • Получить значения FOLDER_ID из url директории на Яндекс.Облако;
  • Если пакет ecss-restrs уже установлен, то указать параметры FOLDER_ID и OAuth-токена при dpkg-reconfigure пакета: 

    sudo dpkg-reconfigure ecss-restfs
  • Если пакет ecss-restrs не установлен, то указать параметры FOLDER_ID и OAuth-токена при установке пакета:

    sudo aptitude install ecss-restfs
  • Проверить состояние ключей через http-терминал:

    tester@ecss1:~$ curl localhost:9990/tts_info
    
    {
        "folderId":"UKqJakGZnKKkoc7agA",
        "service":"yandex",
        "keys":
        {
            "AQAAA5duo0v_-XFP_jAATuwa7G8DtRMEeLvUDSkXngKvEb1SNZ1S4ARy5r7":"CggaATEVAgAAABKABCqjm-
            lI92RDbvfhFHK9CFzE8B3RnFR4LslDZ4Fw_p98oX0kOtbxMQcsCrq166Yc9sO2lfyCn7ffvcHE9ZSiTvx6h5Imhix3FMzI_abqirtai33ASNZ1S4ARy5Ydou3fnwOMzBtf8-
            MquvWGAgAnwGqQuVGZ4ZA1GQxBGjZMjugNjDfwSlpEb-vqyw9NMqpgayxXV7D7GAgAnwGqQuVGriDmt5duo0v_-XFP_jH_g9qU-DsEco0rZS0HQFupzshjJqSE8Gm5-
            FwFJCqak5dwNHsNSKOYspkRj87GAgAnwGqQuVGCOkD7vHOlod3bJu5WzwQprAKOORb73PDMNg22dXhYLwa2kg_OdRz0euq9sIr_1zQkTsIr_1zQkTIXuk8_FyfDWJA3WNAb2lRGj-
            AODAl0vf9iR7i5Pgm0-mu80v_xBbYsSexk6luvUSGXTLL1PX6PSROwUXClb1bFTyn7ojNZNyLnKTQTDyngTf5ySutpOPf
        },
        "OAuth":"GAgAnwGqQuVGZ4ZA1GQxBGjZMjugNjDfwSlpEb" 
    }
    XML
    • folderId — идентификатор директории на Яндекс.Облако;
    • service — сервис, используемый для генерации голоса;
    • keys — IAM-токен, который RestFS автоматически запрашивает каждые 12 часов;
    • OAuth — OAuth-токен, указанный при установке сервиса;
    • localhost — ip-адрес RestFS.

Добавление дополнительного профиля Яндекс.Облако

Для добавления дополнительного профиля Яндекс.Облако нужно отправить http-запрос:

curl localhost:9990/generate?OAuth=<OAuth_токен>&folderId=<folderId>

Для немедленного обновления IAM-токена нужно отправить следующий http-запрос:

curl localhost:9990/generate?OAuth=<OAuth_токен>&folderId=<folderId>&update_key=True

Настройка сервиса tts для работы с Eltex TTS

Eltex TTS — сервис синтеза речи, предоставляемый приложением ASR (документация), так же как и Yandex-Speechkit, позволяет озвучить любой текст, но только на русском языке с возможностью выбора одно из нескольких голосов.

Настройка Eltex TTS во время установки или реконфигурирования RestFs

Команда для установки ecss-restfs:

sudo apt install ecss-restfs

Команда для реконфигурирования ecss-restfs:

sudo dpkg-reconfigure ecss-restfs

Для работы сервиса Eltex TTS необходимо во время установки/реконфигурирования настроить следующие параметры:

1. Ответьте «Yes» на вопрос "Необходимо ли использование сервиса Text To Speech" (рисунок 1):

Рисунок 1 — Вопрос о необходимости использования сервиса Text To Speech

2. Выберите Eltex TTS сервис (рисунок 2):

Рисунок 2 — Выбор поддерживаемого сервиса Text To Speech

3. Укажите адрес и порт сервиса Eltex TTS (рисунок 3):

Рисунок 3 — Настройка адреса и порта сервиса Eltex TTS

4. Выберите желаемый голос для синтеза речи (рисунок 4):

Рисунок 4 — Выбор голоса сервиса Eltex TTS

После конфигурирования данных настроек, запросы на синтез речи будут отправляться на указанный сервис.

Настройка распределенного хранилища

В системе ECSS-10 реализованы сервисы, которые в процессе своей работы формируют данные и сохраняют их на дисковое пространство. Такими сервисами являются:

  • услуга "Запись разговоров" (Call recording);
  • услуга передачи факса (Fax);
  • услуга "Голосовая почта" (Voicemail).

Данные сервисы генерируют файлы и работают с дисковыми хранилищами.

Под распределенным хранилищем подразумевается возможность сохранять записанные файлы на разные хосты.

Рисунок 5 — Пример распределенного хранилища

Каждое хранилище состоит из следующих элементов:

  • RestFS — компонент, обеспечивающий интерфейс прикладного программирования HTTP API для работы с файлами.
  • GlusterFS — распределенная файловая система, обеспечивающая надежное хранилище (необязательный компонент для систем без резервирования).

Количество распределенных хранилищ не ограничено, возможно совмещение всех хранилищ на одном хосте. В базу данных сохраняется полный URI для записанного файла, поэтому, например, при прослушивании записи разговора из web-интерфейса, система обратится на сервер, идентифицируемый данным URI в базе данных.

Распределенная файловая система glusterfs автоматически синхронизирует файлы между нодами кластера. Таким образом, в кластерном варианте работы сервис при проблемах с одним из серверов автоматически будет делать попытку записи файла либо попытку его считывания с другого сервера.

Дисковое хранилище может работать в двух режимах:

  • Простой режим (Single mode) — в данном режиме все типы данных (записи разговоров, факсы, файлы голосовой почты) отправляются в одно файловое хранилище. Для настройки данного режима достаточно настроить сервис RestFS.
  • Распределенный режим (Distributed mode) — в данном режиме все типы данных (записи разговоров, факсы, файлы голосовой почты) отправляются в разные файловые хранилища. Распределенный режим предполагает, что пакет ecss-restfs, обеспечивающий программный интерфейс HTTP API, будет установлен на несколько хостов. Перед установкой пакета необходимо убедиться, что имя хоста "hostname", на который ставится пакет, не равно ecss1 или ecss2. В противном случае может возникнуть конфликт с нодами restfs, которые запущены на хостах системы ECSS-10 локально.

Порядок настройки дискового хранилища в распределенном режиме

  1. Установите пакет restfs. Для этого необходимо выполнить следующую команду:

    sudo apt install ecss-restfs
    
  2. После установки пакета сконфигурируйте параметры listen_port и listen_ip таким образом, чтобы подсистема restfs находилась в одной сети с системой ECSS-10. Для этого выполните настройку ноды согласно Настройка RestFS.
  3. Произведите изменения в конфигурационных файлах.

    Необходимо проверить, и при необходимости настроить параметр MYSQL_IP в файле ecss-cocon-mysql:

    /etc/dnsmasq.d/ecss-cocon-mysql:
    address=/cocon.mysql.ecss/<MYSQL_IP>

    и параметры ECSS_1_IP и ECSS_2_IP в файле ecss-broker:

    /etc/dnsmasq.d/ecss-broker: 
    address=/primary.broker.ecss/<ECSS_1_IP> 
    address=/secondary.broker.ecss/<ECSS_2_IP>

    где:

    • MYSQL_IP — виртуальный адрес для доступа к mysql;
    • ECSS_1_IP — ip-адрес ноды ecss1, на котором слушает сервис mycelium;
    • ECSS_2_IP — ip-адрес ноды ecss2, на котором слушает сервис mycelium;
  4. Перезапустите сервисы dnsmasq и ecss-restfs.

    Для этого выполните следующую команду:

    sudo systemctl restart ecss-ds.service ecss-restfs.service
  5. После настройки и подключения нужного количества нод restfs укажите системе ECSS-10, в какую ноду будет сохраняться тот или иной тип данных. Для этого необходимо выполнить требования раздела «Конфигурирование URL для доступа к распределенному хранилищу».

Конфигурирование URL для доступа к распределенному хранилищу

  1. Сконфигурируйте соотношение выделенных имен для хранилища на DNS-сервере (при использовании DNS-сервера) либо в локальных файлах /etc/hosts, находящихся на хостах медиа-сервера и web-конфигуратора (в случае, если DNS-сервер не используется).

    Пример для варианта с /etc/hosts:

    IP-REC1-STORAGE rec.media-storage.ecss
    IP-REC2-STORAGE rec.media-storage.ecss
    IP-FAX1-STORAGE fax.media-storage.ecss
    IP-FAX2-STORAGE fax.media-storage.ecss
    IP-VOICEMAIL1-STORAGE voicemail.media-storage.ecss
    IP-VOICEMAIL2-STORAGE voicemail.media-storage.ecss

    где:

    • IP-REC1-STORAGE — IP-адрес 1-го хоста для хранения записей разговоров;
    • IP-REC2-STORAGE — IP-адрес 2-го хоста для хранения записей разговоров;
    • IP-FAX1-STORAGE — IP-адрес 1-го хоста для хранения файлов принятых факсов;
    • IP-FAX2-STORAGE — IP-адрес 2-го хоста для хранения файлов принятых факсов;
    • IP-VOICEMAIL1-STORAGE — IP-адрес 1-го хоста для хранения записей voicemail;
    • IP-VOICEMAIL2-STORAGE — IP-адрес 2-го хоста для хранения записей voicemail.
  2. Скорректируйте значение указателей ресурса URI для обращения к хранилищу.

    По умолчанию для данных параметров установлено значение system. В этом случае сетевой адрес хранилища для всех трех сервисов одинаков. Его значение устанавливается командами /system/system-restfs-host и /system/system-restfs-port.

    Для установки значения указателя ресурса URI для каждого из сервисов используется своя команда:

    /domain/DOMAIN_NAME/properties/set call_record_server_peer <URI>

    /domain/DOMAIN_NAME/properties/set fax_server_peer <URI>

    /domain/DOMAIN_NAME/properties/set voicemail_server_peer <URI>

    где:

    • URI — указатель ресурса хоста, который используется в качестве сетевого хранилища.

    Примеры команд для настройки сетевого хранилища на выделенном сервере с URI media-storage.ecss:

    /domain/DOMAIN_NAME/properties/set call_record_server_peer rec.media-storage.ecss:9990
    /domain/DOMAIN_NAME/properties/set fax_server_peer fax.media-storage.ecss:9990
    /domain/DOMAIN_NAME/properties/set voicemail_server_peer voicemail.media-storage.ecss:9990

    После выполнения настройки ресурса хоста все данные, формируемые сервисами, будут записываться на сервера, идентифицируемые теми URI, которые были указаны в командах настройки.

Переполнение разделов хранилища

Для предотвращения ситуаций переполнения разделов хранилища нужно настроить пороги генерации предупреждений и аварийных сообщений о переполнении раздела (см. Пороги использования ресурсов). При достижении настроенного порога система автоматически сообщит об этом.

Для предотвращения переполнения разделов хранилища на уровне каждого кластера RestFS есть подсистема, которая позволяет автоматически удалять файлы по определенным правилам — autocleaner. Сервис  autocleaner может быть сконфигурирован  командами функции autocleaner , либо будут использованы дефолтные установки.

Настойка глобально autocleaner, для кластера RestFS в целом

Функция предотвращения переполнения разделов хранилища реализована, как глобально для кластера RestFS в целом, так и для каждого отдельного домена ECSS. 
В случае отсутствия файла "cleaner.json" в директории /var/lib/ecss/restfs/domain/<Имя_домена>/ , т.е. в данном домене не созданы правила удаления старых файлов, будет применятся глобальная конфигурация (указанная в файле  /var/lib/ecss/restfs/cleaner.json, данный файл создается при установке RestFS).
{
    "rules": [
        {
            "path":      "records",
            "file-mask": "*.wav",
            "outdate":   "180",
            "exclude": ["system"]
        },
        {
            "path":      "records",
            "file-mask": "*.pcm",
            "outdate":   "180",
            "exclude": ["system"]
        },
        {
            "path":      "records",
            "file-mask": "*.meta",
            "outdate":   "180",
            "exclude": ["system"]
        },
        {
            "path":      "records",
            "file-mask": "*.mp3",
            "outdate":   "180",
            "exclude": ["system"]
        },
        {
            "path":      "fax",
            "file-mask": "*.pdf",
            "outdate":   "180" 
        },
        {
            "global-path": "/tmp",
            "file-mask": "convert*.wav" 
        },
        {
            "global-path": "/tmp",
            "file-mask": "tts*.pcm" 
        },
        {
            "global-path": "/tmp",
            "file-mask": "dn_resolver*.json" 
        }
    ]
}

параметр "path":"records" указывает путь поиска файлов относительно директории /var/lib/ecss/restfs/,
в данном примере  /var/lib/ecss/restfs/domain/test_domain/records и /var/lib/ecss/restfs/domain/trueconf.ru/records :

/var/lib/ecss/restfs$ tree -d
.
├── cleaner.json

├── domain
│   ├── test_domain
│   │   └── records
│   │       ├── 2025_04_24
│   │       └── test
│   └── trueconf.ru
│       └── records
│           ├── 2025_08_06
│           └── test
└── template
    └── default.json

параметр  "file-mask": "*.wav"/ "*.mp3" указывает фильтр поиска файлов для проверки на старость :

/var/lib/ecss/restfs$ tree
.
├── cleaner.json
├── domain
│   ├── test_domain
│   │   └── records
│   │       ├── 2025_04_24
│   │           └── ai_you_test.wav 
. . .
│   └── trueconf.ru
│       └── records
│           └── 2025_08_06
│               └── 2025-08-06_12-02-27_o_42009-42007.mp3
. . .
└── template
    └── default.json

параметр  "outdate":   "180" указывает как долго должны быть сохранены файлы с указанным критерием поиска (для примера *.mp3), в данном случае удалять все файлы старше 180 дней. 

Для примера если сегодня 07 августа, то при значении outdate=180 будут удалятся файлы созданные до 08 февраля этого года.
Файлы "ai_you_test.wav" и "2025-08-06_12-02-27_o_42009-42007.mp3" созданы 24 апреля и 06 августа соответственно, поэтому не будут удалены.

параметр  "exclude": ["system"] указывает директорию исключения. 

/var/lib/ecss/restfs$ tree
.
├── cleaner.json
├── domain
│   ├── test_domain
│   │   └── records
│   │       ├── 2025_04_24
│   │           └── ai_you_test.wav 
. . .

├── system
│   └── sounds
│       ├── activated.wav
│       ├── ai_activated.wav
│       ├── ai_added.wav
│       ├── ai_agent_already_on.wav
. . .
│       └── ai_you_have.wav
└── template
    └── default.json

В данном примере файлы activated.wav / ai_activated.wav / ai_added.wav / ai_agent_already_on.wav / ai_you_have.wav — находятся в директории "system" — директории исключения, поэтому они никогда не будут удалены. Файл  ai_you_test.wav  будет удален 21 октября.

Дополнительно для кластера RestFS в целом, есть возможность указать директорию, которая так же будет анализироваться сервисом autocleaner. По умолчанию добавлена директория "/tmp" , при этом указывается полный путь , от "/" файловой системы.

параметр  "global-path": "/tmp" указывает глобальную директорию "/tmp" для сервиса autocleaner :

/tmp$ tree
.
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-core.service-8fy7w3  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-crm-server.service-v6wjSX  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-ds.service-AI4TkZ  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-media-server.service-PSvy25  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-mediator.service-8jCcds  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-mycelium.service-2N31rc  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-pa-sip.service-Kbqmeb  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-web-conf.service-18byt0  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ecss-web-socket.service-jSGoHV  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-incron.service-tp3lRB  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-memcached.service-FUJTsL  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-ntp.service-K6Wv6X  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-systemd-logind.service-7sQKDh  [error opening dir]
├── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-systemd-resolved.service-V8OE0p  [error opening dir]
└── systemd-private-97cd2fbf6b7a4e3b9f8da9394ff59668-upower.service-O1348M  [error opening dir]

Для "global-path": можно указать только параметр "file-mask":

параметры "outdate": и "exclude": для "global-path": не применимы


Настойка  autocleaner, для определенного домена

При необходимости настроить для определенного домена индивидуальные параметры, для примера увеличить время хранения файлов с 180 до 365 дней, можно использовать cleaner.json для домена. При использовании данного файла, параметры из глобального файла /var/lib/ecss/restfs/cleaner.json анализироваться не будут.

Файл cleaner.json должен находится — /var/lib/ecss/restfs/domain/<имя_домена>/cleaner.json.

/var/lib/ecss/restfs/domain/trueconf.ru$ tree
.
├── cleaner.json
└── records
    ├── 2025_08_06
    │   └── 2025-08-06_12-02-27_o_42009-42007.mp3
    └── test

Данный файл можно сконфигурировать через CoCon:

/domain/имя_домена/restfs/autocleaner/ 

действия:

add-rule — добавить новое правило;
change-rule— изменить правило;     
info— посмотреть информацию , со списком всех правил;
remove-rule— удалить правило.

атрибуты:
rule position — позиция правила в списке правил;
mask — фильтр поиска файлов;
outdate — время хранения файлов до удаления в днях;
path — путь (относительно /var/lib/ecss/restfs/domain/имя_домена/) к директории  поиска файлов.

после выполнения команды : /domain/имя_домена/restfs/autocleaner/add-rule или /domain/имя_домена/restfs/autocleaner/change-rule в директории —
/var/lib/ecss/restfs/domain/имя_домена будет создан файл cleaner.json. И для данного домена autocleaner будет использовать локальную конфигурацию вместо глобальной.