#!/bin/bash # bj-keymedia-worker — демон обработки запросов установки ключа (host namespace). REQDIR=/var/lib/bj/keymedia-requests getf(){ python3 -c "import json;print(json.load(open('$1')).get('$2',''))" 2>/dev/null; } process_one(){ local req="$1" id res action staging profile tdev tmnt extra chan out id=$(basename "$req" .req); res="$REQDIR/$id.res" action=$(getf "$req" action); staging=$(getf "$req" staging); profile=$(getf "$req" profile) tdev=$(getf "$req" target_dev); tmnt=$(getf "$req" target_mnt); extra=$(getf "$req" extra); chan=$(getf "$req" channel) rm -f "$req" case "$action" in quikexport-*) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-quikexport-admin "${action#quikexport-}" "$staging" 2>&1) ;; component-install) out=$(/usr/local/sbin/bj-component-install "$staging" 2>&1) ;; # интеграционный шлюз НРД: состояние, установка, канал контура (TEST3 | боевой); параметры — JSON в extra igate-status|igate-install|igate-contour|igate-share|igate-rollback) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-igate-admin "${action#igate-}" 2>&1) ;; # датчик случайных чисел Валидаты: проверка и сеанс «двигайте мышью» (движения — из мастера bj) rng-status|rng-start|rng-cancel) out=$(/usr/local/sbin/bj-validata-rng "${action#rng-}" 2>&1) ;; # системные настройки сервера: серверы времени (NTP) system-ntp|system-tz|system-sync|system-ports) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-system-admin "${action#system-}" 2>&1) ;; # вход 1С в базу bj (проверка поручений в 1С): логин onec_bj, pg_hba.conf; параметры — JSON в extra onec-access|onec-revoke) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-onec-admin "${action#onec-}" 2>&1) ;; # резервное копирование и восстановление (настройки bj → bj-backup-admin); параметры — JSON в extra backup-config|backup-test|backup-run|backup-list|backup-verify|backup-restore) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-backup-admin "${action#backup-}" 2>&1) ;; # Перезапуск службы модуля из админки. Список закрытый: чужую службу # (и сам этот демон) отсюда тронуть нельзя. unit-restart) case "$extra" in bj-server|bj-npr|bj-quikexport|bj-lk|bj-crypto|igate) systemctl reset-failed "$extra" >/dev/null 2>&1 if err=$(systemctl restart "$extra" 2>&1); then out="{\"ok\":true,\"output\":\"перезапущено: $extra\"}" else err=$(printf '%s' "$err" | tr -d '"\\' | tr '\n' ' ') out="{\"ok\":false,\"error\":\"$extra: $err\"}" fi ;; *) out="{\"ok\":false,\"error\":\"недопустимая служба\"}" ;; esac ;; unit-disable|unit-enable) # службы модулей по лицензии: модуль сняли с лицензии — остановить и отключить, вернули — включить case "$extra" in bj-npr|bj-quikexport|bj-lk) if [ "$action" = unit-disable ]; then err=$(systemctl disable --now "$extra" 2>&1); else systemctl reset-failed "$extra" >/dev/null 2>&1; err=$(systemctl enable --now "$extra" 2>&1); fi if [ $? -eq 0 ]; then out="{\"ok\":true,\"output\":\"$action: $extra\"}" else err=$(printf '%s' "$err" | tr -d '"\\' | tr '\n' ' '); out="{\"ok\":false,\"error\":\"$extra: $err\"}"; fi ;; *) out="{\"ok\":false,\"error\":\"недопустимая служба\"}" ;; esac ;; *) out=$(BJ_TARGET_DEV="$tdev" BJ_TARGET_MNT="$tmnt" BJ_EXTRA="$extra" BJ_CHANNEL="$chan" /usr/local/sbin/bj-keymedia-install "$action" "$staging" "$profile" 2>&1) ;; esac printf '%s' "$out" > "$res.tmp"; chown bj:bj "$res.tmp" 2>/dev/null mv -f "$res.tmp" "$res" } shopt -s nullglob while true; do for req in "$REQDIR"/*.req; do process_one "$req"; done sleep 1 done