|
|
|
@ -40,6 +40,8 @@ CAPTURE_MOCK_LOG_SUCCESS="${CAPTURE_MOCK_LOG_SUCCESS:-0}"
|
|
|
|
MOCK_SENDER_PID=""
|
|
|
|
MOCK_SENDER_PID=""
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
|
|
|
|
ACTIVE_SERVICE_UNIT=""
|
|
|
|
|
|
|
|
SYSTEMCTL_BIN=(systemctl)
|
|
|
|
|
|
|
|
|
|
|
|
############################
|
|
|
|
############################
|
|
|
|
# ЧАСТОТЫ И SERIAL ИЗ ENV
|
|
|
|
# ЧАСТОТЫ И SERIAL ИЗ ENV
|
|
|
|
@ -50,6 +52,7 @@ ACTIVE_MOCK_PID=""
|
|
|
|
ORDER=(1200)
|
|
|
|
ORDER=(1200)
|
|
|
|
declare -A SERIAL
|
|
|
|
declare -A SERIAL
|
|
|
|
declare -A FREQ_HZ
|
|
|
|
declare -A FREQ_HZ
|
|
|
|
|
|
|
|
declare -A SERVICE_UNIT
|
|
|
|
|
|
|
|
|
|
|
|
#SERIAL[433]="$hack_433"
|
|
|
|
#SERIAL[433]="$hack_433"
|
|
|
|
FREQ_HZ[433]="433000000"
|
|
|
|
FREQ_HZ[433]="433000000"
|
|
|
|
@ -81,6 +84,17 @@ FREQ_HZ[5200]="5200000000"
|
|
|
|
SERIAL[5800]="0000000000000000518864dc33743883"
|
|
|
|
SERIAL[5800]="0000000000000000518864dc33743883"
|
|
|
|
FREQ_HZ[5800]="5800000000"
|
|
|
|
FREQ_HZ[5800]="5800000000"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SERVICE_UNIT[433]="dronedetector-sdr-433.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[750]="dronedetector-sdr-750.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[868]="dronedetector-sdr-868.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[915]="dronedetector-sdr-915.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[1200]="dronedetector-sdr-1200.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[2400]="dronedetector-sdr-2400.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[3300]="dronedetector-sdr-3300.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[4500]="dronedetector-sdr-4500.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[5200]="dronedetector-sdr-5200.service"
|
|
|
|
|
|
|
|
SERVICE_UNIT[5800]="dronedetector-sdr-5800.service"
|
|
|
|
|
|
|
|
|
|
|
|
############################
|
|
|
|
############################
|
|
|
|
# ВСПОМОГАТЕЛЬНОЕ
|
|
|
|
# ВСПОМОГАТЕЛЬНОЕ
|
|
|
|
############################
|
|
|
|
############################
|
|
|
|
@ -89,6 +103,58 @@ log() {
|
|
|
|
printf '[%s] %s\n' "$(date '+%F %T')" "$*"
|
|
|
|
printf '[%s] %s\n' "$(date '+%F %T')" "$*"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
systemctl_run() {
|
|
|
|
|
|
|
|
"${SYSTEMCTL_BIN[@]}" "$@"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service_exists() {
|
|
|
|
|
|
|
|
local unit="$1"
|
|
|
|
|
|
|
|
systemctl_run show "$unit" >/dev/null 2>&1
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service_is_active() {
|
|
|
|
|
|
|
|
local unit="$1"
|
|
|
|
|
|
|
|
systemctl_run is-active --quiet "$unit" >/dev/null 2>&1
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
stop_band_service() {
|
|
|
|
|
|
|
|
local band="$1"
|
|
|
|
|
|
|
|
local unit="${SERVICE_UNIT[$band]:-}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ACTIVE_SERVICE_UNIT=""
|
|
|
|
|
|
|
|
if [[ -z "$unit" ]]; then
|
|
|
|
|
|
|
|
log "Для band=$band не найден service unit"
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! service_exists "$unit"; then
|
|
|
|
|
|
|
|
log "Service unit $unit не установлен, пропускаю stop/start"
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! service_is_active "$unit"; then
|
|
|
|
|
|
|
|
log "Service $unit не активен, stop/start не нужен"
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log "Останавливаю service $unit перед записью band=$band"
|
|
|
|
|
|
|
|
if ! systemctl_run stop "$unit"; then
|
|
|
|
|
|
|
|
log "Не удалось остановить service $unit"
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
ACTIVE_SERVICE_UNIT="$unit"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
start_active_service() {
|
|
|
|
|
|
|
|
if [[ -z "$ACTIVE_SERVICE_UNIT" ]]; then
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log "Запускаю service $ACTIVE_SERVICE_UNIT после записи"
|
|
|
|
|
|
|
|
systemctl_run start "$ACTIVE_SERVICE_UNIT" || log "Не удалось запустить service $ACTIVE_SERVICE_UNIT"
|
|
|
|
|
|
|
|
ACTIVE_SERVICE_UNIT=""
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
env_get() {
|
|
|
|
env_get() {
|
|
|
|
local key="$1"
|
|
|
|
local key="$1"
|
|
|
|
local default="${2:-}"
|
|
|
|
local default="${2:-}"
|
|
|
|
@ -202,6 +268,7 @@ cleanup_active_jobs() {
|
|
|
|
wait "$ACTIVE_CAPTURE_PID" 2>/dev/null || true
|
|
|
|
wait "$ACTIVE_CAPTURE_PID" 2>/dev/null || true
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
stop_mock_sender "${ACTIVE_MOCK_PID:-}"
|
|
|
|
stop_mock_sender "${ACTIVE_MOCK_PID:-}"
|
|
|
|
|
|
|
|
start_active_service
|
|
|
|
exit "$rc"
|
|
|
|
exit "$rc"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -228,6 +295,20 @@ ensure_requirements() {
|
|
|
|
exit 1
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! command -v systemctl >/dev/null 2>&1; then
|
|
|
|
|
|
|
|
echo "Не найден systemctl" >&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "${EUID}" -ne 0 ]]; then
|
|
|
|
|
|
|
|
if command -v sudo >/dev/null 2>&1; then
|
|
|
|
|
|
|
|
SYSTEMCTL_BIN=(sudo systemctl)
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
echo "Для управления service нужен root или sudo" >&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
mkdir -p "$BASE_DIR"
|
|
|
|
mkdir -p "$BASE_DIR"
|
|
|
|
|
|
|
|
|
|
|
|
local dev
|
|
|
|
local dev
|
|
|
|
@ -241,6 +322,11 @@ run_one_freq() {
|
|
|
|
local serial="${SERIAL[$band]}"
|
|
|
|
local serial="${SERIAL[$band]}"
|
|
|
|
local freq="${FREQ_HZ[$band]}"
|
|
|
|
local freq="${FREQ_HZ[$band]}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ -z "$serial" ]]; then
|
|
|
|
|
|
|
|
log "Для band=$band пустой serial, пропускаю"
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
local ts out_dir log_file
|
|
|
|
local ts out_dir log_file
|
|
|
|
ts="$(date '+%F_%H-%M-%S')"
|
|
|
|
ts="$(date '+%F_%H-%M-%S')"
|
|
|
|
out_dir="$BASE_DIR/$band/$ts"
|
|
|
|
out_dir="$BASE_DIR/$band/$ts"
|
|
|
|
@ -249,6 +335,9 @@ run_one_freq() {
|
|
|
|
mkdir -p "$out_dir"
|
|
|
|
mkdir -p "$out_dir"
|
|
|
|
|
|
|
|
|
|
|
|
log "Старт band=$band serial=$serial freq=$freq dir=$out_dir"
|
|
|
|
log "Старт band=$band serial=$serial freq=$freq dir=$out_dir"
|
|
|
|
|
|
|
|
if ! stop_band_service "$band"; then
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
"$PYTHON_BIN" "$SCRIPT_PATH" \
|
|
|
|
"$PYTHON_BIN" "$SCRIPT_PATH" \
|
|
|
|
--serial "$serial" \
|
|
|
|
--serial "$serial" \
|
|
|
|
@ -281,6 +370,7 @@ run_one_freq() {
|
|
|
|
kill -TERM "$pid" 2>/dev/null || true
|
|
|
|
kill -TERM "$pid" 2>/dev/null || true
|
|
|
|
wait "$pid" 2>/dev/null || true
|
|
|
|
wait "$pid" 2>/dev/null || true
|
|
|
|
stop_mock_sender "$mock_pid"
|
|
|
|
stop_mock_sender "$mock_pid"
|
|
|
|
|
|
|
|
start_active_service
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
return 2
|
|
|
|
return 2
|
|
|
|
@ -304,6 +394,7 @@ run_one_freq() {
|
|
|
|
|
|
|
|
|
|
|
|
wait "$pid" 2>/dev/null || true
|
|
|
|
wait "$pid" 2>/dev/null || true
|
|
|
|
stop_mock_sender "$mock_pid"
|
|
|
|
stop_mock_sender "$mock_pid"
|
|
|
|
|
|
|
|
start_active_service
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
break
|
|
|
|
break
|
|
|
|
@ -313,6 +404,7 @@ run_one_freq() {
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
stop_mock_sender "$mock_pid"
|
|
|
|
stop_mock_sender "$mock_pid"
|
|
|
|
|
|
|
|
start_active_service
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_CAPTURE_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
ACTIVE_MOCK_PID=""
|
|
|
|
log "Завершен band=$band, размер=$(du -sh "$out_dir" | awk '{print $1}')"
|
|
|
|
log "Завершен band=$band, размер=$(du -sh "$out_dir" | awk '{print $1}')"
|
|
|
|
|