#!/bin/bash # shellcheck disable=SC1091 source "${AGENT_PATH}/common.sh" _check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" # Set defaults WEB_PORT="${WEB_PORT:-8080}" INFLUXDB_PORT="${INFLUXDB_PORT:-8086}" DEVICES="${DEVICES:-sda}" PRIVILEGED_MODE="${PRIVILEGED_MODE:-false}" COLLECTOR_CRON_SCHEDULE="${COLLECTOR_CRON_SCHEDULE:-0 0 * * *}" # Build device arguments array DEVICE_ARGS=() if [ "$PRIVILEGED_MODE" = "true" ]; then DEVICE_ARGS+=("--privileged") else for dev in $DEVICES; do # Auto-prepend /dev/ if not already a path if [[ "$dev" != /* ]]; then dev="/dev/$dev" fi if [ -e "$dev" ]; then DEVICE_ARGS+=("--device=$dev") else echo "Warning: Device $dev does not exist, skipping" fi done if [ ${#DEVICE_ARGS[@]} -eq 0 ]; then _die "No valid devices found. Check DEVICES setting or enable PRIVILEGED_MODE." fi fi # Remove existing container if stopped if _is_container_exists "$CONTAINER_NAME"; then if _is_container_running "$CONTAINER_NAME"; then echo "Container ${CONTAINER_NAME} is already running" exit 0 fi _remove_container "$CONTAINER_NAME" fi # Run docker directly with proper quoting docker run -d \ --restart unless-stopped \ --name "${CONTAINER_NAME}" \ -p "${WEB_PORT}:8080" \ -p "${INFLUXDB_PORT}:8086" \ -v "${CONTAINER_NAME}_config:/opt/scrutiny/config" \ -v "${CONTAINER_NAME}_influxdb:/opt/scrutiny/influxdb" \ -v /run/udev:/run/udev:ro \ --cap-add SYS_RAWIO \ --cap-add SYS_ADMIN \ -e "COLLECTOR_CRON_SCHEDULE=${COLLECTOR_CRON_SCHEDULE}" \ "${DEVICE_ARGS[@]}" \ "${IMAGE_REGISTRY}/${IMAGE_REPO}:${IMAGE_TAG}" # Verify running sleep 2 if ! _is_container_running "$CONTAINER_NAME"; then echo "Container logs:" docker logs "$CONTAINER_NAME" 2>&1 | tail -20 _die "Container ${CONTAINER_NAME} is not running" fi echo "Container ${CONTAINER_NAME} started successfully."