| Подсказка | ||
|---|---|---|
| ||
Прежде чем применять настройки - внимательно читаем. От этого зависит работоспособность системы |
| Информация | ||
|---|---|---|
| ||
| В системе реализована работа billd как системного юнита, при этом управление плагинами переносится в webinterface |
| Оглавление | ||
|---|---|---|
|
| Отображение дочерних элементов |
|---|
Создание юнита
| Предупреждение |
|---|
| Внимание, после запуска юнита, система будет искать настройки плагинов в вебинтерфейсе! Пока вы настриваете, может получится двойной запуск! |
| Блок кода | ||
|---|---|---|
| ||
nano /etc/systemd/system.billd.service |
И переносим туда следующие данные
| Блок кода | ||
|---|---|---|
| ||
[Unit] Description="АСР Казна-39" - Accounting Control Daemon After=network.target mysql.service mariadb.service StartLimitIntervalSec=0 [Service] Type=simple User=root Group=root WorkingDirectory=/usr/abills ExecStart=/usr/abills/libexec/billd -d Restart=always RestartSec=3 # Logging StandardOutput=journal StandardError=journal SyslogIdentifier=billd # Hardening NoNewPrivileges=true PrivateTmp=true ProtectSystem=off ProtectHome=false # Resource limits LimitNOFILE=65536 TasksMax=10000 [Install] WantedBy=multi-user.target |
Делаем его исполняемым
| Блок кода | ||
|---|---|---|
| ||
service billd enable |
Запускаем
| Блок кода | ||
|---|---|---|
| ||
service billd start |
Перезапуск
| Блок кода | ||
|---|---|---|
| ||
service billd restart |
Описания настройки в вебинтерфейсе
У администратора должны быть права 5:12 "Разрешить глобальные настройки системы".
Переходим в меню:
Настройка>Системные настройки>Настройки ядра
Вкладка "Периодические процессы"
Далее вам надо добавить плагин:
Нажимаем "+" и выбираем плагин, который нам надо выполнить:
Если требуется - описываем аргументы запуска плагина (Точно такие-же как и в кроне)
Выбираем время запуска (отличие от от крна, что можно выбрать и секунду запуска, если поле секунда не заполнено или там стоит "-" - то секунды НЕ учитываются.
Поле "Таймаут" - защита от зависания плагина, указывается в секундах, время, по истечении которого плагин будет принудительно остановлен, предотвращает зависание.
В системе предусмотрено каскадное выполнение плагинов:
Для этого надо выбрать Родительский плагин и очерёдность дочернего плагина (равносильно работы в кроне через точку с запятой)
Пример в кроне:
| Блок кода | ||
|---|---|---|
| ||
*/5 * * * * /usr/abills/libexec/billd equipment_pon; /usr/abills/libexec/billd equipment_pon CPE_FILL=1 TRANSACTION=1 ALERT=1 |
То в вебинтерфейсе это реализовывается следующим образом:
Родителем мы оказываем первый запускаемы плагин, порядковый номер, если мы запускаем несколько плагинов для дочернего процесса.
Для активации плагина - ставим чекбокс "Активно"
Настройки плагина сохраняются БЕЗ перечитывания вебинтерфейса, применяются моментально, системный юнит начинает выполнение моментально
Для предотвращения двойных запусков - реализован чекбокс защиты PID, включено по умолчанию, запрещает одновременный запуск олного и того-же плагина одновременно!
Дополнительная информация
Поля cron_min, cron_hour, cron_dom, cron_mon, cron_dow
Формат полностью аналогичен стандартному cron:
| Блок кода | ||
|---|---|---|
| ||
* - любое значение */N - каждые N единиц (минут, часов и т.д.) A - одно конкретное значение A,B,C - перечисление значений A-B - диапазон A-B/N - диапазон с шагом |
Диапазоны значений:
| Блок кода | ||
|---|---|---|
| ||
cron_sec : 0..59 cron_min : 0..59 cron_hour : 0..23 cron_dom : 1..31 cron_mon : 1..12 cron_dow : 0..7 (0 и 7 обычно означают воскресенье) |
Поле cron_sec
Работает так же, как cron_min, но для секунд (0-59). Используется только в режиме демона billd, чтобы запускать задания чаще, чем раз в минуту.
Чекбокс "Активно"
- Правило активно, демон billd учитывает эту строку
- Правило отключено, строка игнорируется
Для временного отключения расписания достаточно установить снять чекбокс и применить изменения
Чекбокс "Защита PID"
По умолчанию защита включена.
Чекбокс выключен - использовать "облегчённую" логику:
- при ручном запуске плагина PID-файл создаётся и защищает от параллельных запусков;
- при запуске через демон этот плагин вызывается с SKIPPID=1 и PID-файл не создаётся.
Чекбокс включён - включить принудительную PID-защиту для плагина, даже если он запускается через демон:
- демон не добавляет SKIPPID=1;
- плагин работает так же, как при ручном запуске, и не позволит запустить второй экземпляр, пока не завершился первый.
Поле timeout_sec
Ограничение времени работы плагина в секундах.
0 - таймаут не задан, поведение зависит от настроек BILLD:
- если в конфиге есть BILLD_TIMEOUT_<plugin_name> или BILLD_PLUGIN_TIMEOUT_DEFAULT, используется это значение;
- если нет ни одного лимита – плагин работает без ограничения по времени (как раньше).
>0 - жёсткий предел для данной строки расписания:
- если процесс плагина работает дольше timeout_sec секунд, демон billd считает его зависшим;
- сначала отправляется SIGTERM, далее (при отсутствии реакции) SIGKILL;
- в лог попадает запись вида PLUGIN TIMEOUT name=<plugin> timeout=<N>s.
Поле parent_id и цепочки master/slave
Позволяет строить цепочки "мастер/слейв" внутри одного расписания.
parent_id:
- 0 - запись корневая, мастер (запускается по cron_*)
- ID другой строки - слейв, который запускается только после того, как в этом же такте был выполнен мастер
chain_order:
- Порядок выполнения слейвов для одного мастера.
- Записи с одинаковым parent_id сортируются по chain_order, затем по id.
В одном такте работы демона:
- сначала отрабатывают все мастера (parent_id=0), которые подходят под cron_* на текущий момент времени;
- после завершения мастера запускаются его слейвы в порядке chain_order (и их слейвы, рекурсивно).
Пример цепочки для equipment_pon:
1) Мастер:
| Блок кода | ||
|---|---|---|
| ||
id = 10 plugin_name = equipment_pon plugin_args = "" cron_min = * cron_hour = * ... active = 1 protect_pid = 1 parent_id = 0 chain_order = 0 |
2) Слейв:
| Блок кода | ||
|---|---|---|
| ||
id = 11 plugin_name = equipment_pon plugin_args = CPE_FILL=1 TRANSACTION=1 ALERT=1 cron_min = * (для слейва cron_* игнорируются) cron_hour = * ... active = 1 protect_pid = 1 parent_id = 10 (ID мастера) chain_order = 1 |
В результате при каждом срабатывании мастера (строка 10):
- сначала отработает equipment_pon без аргументов;
- сразу после его завершения отработает equipment_pon
- с параметрами CPE_FILL=1 TRANSACTION=1 ALERT=1.




