You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DroneDetector/restart_all.sh

111 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
COMPOSE_FILE="${PROJECT_ROOT}/deploy/docker/docker-compose.yml"
SDR_UNITS=(
dronedetector-sdr-433.service
dronedetector-sdr-750.service
dronedetector-sdr-1500.service
dronedetector-sdr-3300.service
dronedetector-sdr-4500.service
dronedetector-sdr-5200.service
dronedetector-sdr-5800.service
dronedetector-sdr-915.service
dronedetector-sdr-1200.service
dronedetector-sdr-2400.service
)
CONFIGURED_SDR_UNITS=()
log() {
printf '[restart_all] %s\n' "$*"
}
sdr_unit_env_key() {
local unit="$1"
local band="${unit#dronedetector-sdr-}"
band="${band%.service}"
printf 'hack_%s\n' "$band"
}
get_env_value() {
local key="$1"
awk -F= -v key="$key" '
$1 == key {
value = substr($0, index($0, "=") + 1)
sub(/^[[:space:]]+/, "", value)
sub(/[[:space:]]+$/, "", value)
gsub(/^"/, "", value)
gsub(/"$/, "", value)
gsub(/^'\''/, "", value)
gsub(/'\''$/, "", value)
print value
exit
}
' "${PROJECT_ROOT}/.env"
}
populate_configured_sdr_units() {
CONFIGURED_SDR_UNITS=()
local unit env_key env_value
for unit in "${SDR_UNITS[@]}"; do
env_key="$(sdr_unit_env_key "$unit")"
env_value="$(get_env_value "$env_key")"
if [[ -n "$env_value" ]]; then
CONFIGURED_SDR_UNITS+=("$unit")
else
log "Skipping ${unit}: ${env_key} is empty in .env"
fi
done
}
if [[ -x /usr/bin/sudo ]]; then
SUDO=(sudo)
else
SUDO=()
fi
restart_docker_services() {
log "Restarting Docker services (without build)"
if [[ -f "$COMPOSE_FILE" ]]; then
docker compose -f "$COMPOSE_FILE" up -d
else
log "Compose file not found: $COMPOSE_FILE"
fi
}
restart_sdr_services() {
log "Restarting SDR systemd units"
for unit in "${CONFIGURED_SDR_UNITS[@]}"; do
${SUDO[@]} systemctl restart "$unit"
done
}
print_status() {
log "Docker status"
docker compose -f "$COMPOSE_FILE" ps || true
log "SDR status"
for unit in "${CONFIGURED_SDR_UNITS[@]}"; do
if ${SUDO[@]} systemctl is-active --quiet "$unit"; then
printf '%s: active\n' "$unit"
else
printf '%s: NOT active\n' "$unit"
fi
done
}
main() {
populate_configured_sdr_units
restart_docker_services
restart_sdr_services
print_status
log "Done"
}
main "$@"