#!/bin/bash # ----------------------------------------------------------------------------------------------- # --------------------------------- User Script Stop ------------------------------------------- # ----------------------------------------------------------------------------------------------- # Stops all running User Script processes spawned by the unRAID User Scripts plugin. # Identifies processes by their /tmp/user.scripts path signature. # Supports --dry-run to preview what would be killed without making changes. # ----------------------------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Master.conf" source "$SCRIPT_DIR/../common.sh" parse_args "$@" # ----------------------------------------------------------------------------------------------- # ━━━ $ICON_GEAR Setup ━━━ # ----------------------------------------------------------------------------------------------- echo "" echo "━━━ $ICON_GEAR Setup ━━━" # ROOT CHECK if [[ "$EUID" -ne 0 ]]; then error "Must be run as root" exit 1 fi success "Running as root" # ----------------------------------------------------------------------------------------------- # ━━━ $ICON_SUMMARY Status ━━━ # ----------------------------------------------------------------------------------------------- if [[ "$SHOW_STATUS" == true ]]; then echo "" echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━" echo "$ICON_PLUGIN Target: /tmp/user.scripts processes" echo "$ICON_GEAR Dry Run: $DRY_RUN" echo "━━━━━━━━━━━━━━━━━━━━━━━" exit 0 fi # ----------------------------------------------------------------------------------------------- # FUNCTIONS # ----------------------------------------------------------------------------------------------- # Returns PIDs of all processes running under /tmp/user.scripts # These are processes spawned by the unRAID User Scripts plugin. get_user_script_pids() { /usr/bin/ps -eo pid,cmd | grep "/tmp/user.scripts" | grep -v grep | awk '{print $1}' } # Kills all running User Script processes one by one. # Reports each PID killed or skipped in dry run mode. stop_user_scripts() { local pids pids=$(get_user_script_pids) if [[ -z "$pids" ]]; then info "$ICON_PLUGIN No running User Script processes found — nothing to do" return fi local count=0 for pid in $pids; do if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — would kill User Script PID $pid" else info "Killing User Script PID $pid..." if kill "$pid" 2>/dev/null; then success "Killed PID $pid" else warn "Could not kill PID $pid — may have already exited" fi fi count=$((count + 1)) done if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — would have targeted $count process(es)" else info "$count process(es) targeted" fi } # ----------------------------------------------------------------------------------------------- # ━━━ $ICON_PLUGIN User Script Stop ━━━ # ----------------------------------------------------------------------------------------------- echo "" echo "━━━ $ICON_PLUGIN User Script Stop ━━━" echo "$ICON_PLUGIN Target: User Scripts Plugin processes" echo "$ICON_GEAR Dry Run: $DRY_RUN" echo "" [[ "$DRY_RUN" == true ]] && warn "DRY RUN — no changes will be made" START=$(date +%s) stop_user_scripts END=$(date +%s) # ----------------------------------------------------------------------------------------------- # ━━━ $ICON_SUMMARY Summary ━━━ # ----------------------------------------------------------------------------------------------- echo "" echo "━━━━━ $ICON_SUMMARY USER SCRIPTS STOP SUMMARY ━━━━━" echo "$ICON_TIME Duration: $(format_duration $((END - START)))" if [[ "$DRY_RUN" == true ]]; then echo "$ICON_WARN Status: DRY RUN — no processes killed" else REMAINING=$(get_user_script_pids) if [[ -z "$REMAINING" ]]; then echo "$ICON_DONE Status: $ICON_SUCCESS ALL PROCESSES STOPPED" notify "User Scripts stopped on $(hostname)" "User Script Stop" "warning" else echo "$ICON_WARN Status: $ICON_WARN SOME PROCESSES MAY STILL BE RUNNING" notify "User Script stop completed but some processes may still be running on $(hostname)" "User Script Stop" "warning" fi fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"