126 lines
4.7 KiB
Bash
126 lines
4.7 KiB
Bash
#!/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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" |