152 lines
4.3 KiB
Bash
152 lines
4.3 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
# ----------------------------------------------------------------------------------------------
|
||
# ---------------------------- Unattended Reboot Script for Unraid -----------------------------
|
||
# ----------------------------------------------------------------------------------------------
|
||
# ---------------- User Variables, Please adjust in Master.conf as needed ----------------------
|
||
# ----------------------------------------------------------------------------------------------
|
||
#
|
||
# User variables can be adjusted in Master.conf
|
||
#
|
||
# Scripts now just contain runtime logic
|
||
#
|
||
# This new setup allows for profiles and arguments to use the core script
|
||
# Use arguments in unRAID User Plugin for directory
|
||
# Example: /mnt/user/appdata/unraid_scripts/Rsync/rsync.sh --dry-run
|
||
# ----------------------------------------------------------------------------------------------
|
||
# -------------- End Of User Variables, Please adjust in Master.conf as needed -----------------
|
||
# ----------------------------------------------------------------------------------------------
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
source "$SCRIPT_DIR/../Master.conf"
|
||
source "$SCRIPT_DIR/../common.sh"
|
||
|
||
parse_args "$@"
|
||
|
||
# STATUS MODE
|
||
if [[ "$SHOW_STATUS" == true ]]; then
|
||
echo
|
||
echo "=================================================="
|
||
echo " ℹ️ REBOOT STATUS"
|
||
echo "--------------------------------------------------"
|
||
echo " ⏱ Delay: ${REBOOT_SLEEP:-0}s"
|
||
echo " 🧪 Dry Run: $DRY_RUN"
|
||
echo "=================================================="
|
||
exit 0
|
||
fi
|
||
|
||
# CONFIG
|
||
validate_int REBOOT_SLEEP "$REBOOT_SLEEP"
|
||
|
||
# HEADER
|
||
echo
|
||
echo "============================================================"
|
||
echo " 🚀 UNRAID REBOOT SEQUENCE STARTING"
|
||
echo "------------------------------------------------------------"
|
||
echo " ⏱ Delay: ${REBOOT_SLEEP}s"
|
||
echo " 🧪 Dry Run: $DRY_RUN"
|
||
echo "============================================================"
|
||
|
||
log "ℹ️ Reboot sequence initiated"
|
||
|
||
# FUNCTIONS
|
||
notify_users() {
|
||
warn "🟡 Notifying users of reboot"
|
||
wall "⚠️ Unraid server will reboot in ${REBOOT_SLEEP} second(s). Save your work."
|
||
}
|
||
|
||
stop_docker() {
|
||
if [[ "$DRY_RUN" == true ]]; then
|
||
warn "🧪 Would stop Docker service"
|
||
return
|
||
fi
|
||
|
||
info "🟡 Stopping Docker service"
|
||
|
||
if /etc/rc.d/rc.docker stop; then
|
||
info "🟢 Docker stopped"
|
||
else
|
||
warn "🔴 Docker stop failed or already stopped"
|
||
fi
|
||
}
|
||
|
||
stop_vm_manager() {
|
||
if [[ "$DRY_RUN" == true ]]; then
|
||
warn "🧪 Would stop VM Manager (libvirt)"
|
||
return
|
||
fi
|
||
|
||
info "🟡 Stopping VM Manager"
|
||
|
||
if /etc/rc.d/rc.libvirt stop; then
|
||
info "🟢 VM Manager stopped"
|
||
else
|
||
warn "🔴 VM Manager stop failed or already stopped"
|
||
fi
|
||
}
|
||
|
||
sync_disks() {
|
||
if [[ "$DRY_RUN" == true ]]; then
|
||
warn "🧪 Would sync filesystem buffers"
|
||
return
|
||
fi
|
||
|
||
info "🟡 Syncing disks"
|
||
|
||
if sync; then
|
||
info "🟢 Disk sync complete"
|
||
else
|
||
warn "🔴 Sync command returned error"
|
||
fi
|
||
}
|
||
|
||
reboot_system() {
|
||
if [[ "$DRY_RUN" == true ]]; then
|
||
warn "🧪 Would reboot system (/sbin/reboot)"
|
||
return
|
||
fi
|
||
|
||
info "🔴 Rebooting system NOW"
|
||
|
||
/sbin/reboot
|
||
}
|
||
|
||
# EXECUTION
|
||
START_TIME=$(date +%s)
|
||
|
||
if [[ "$REBOOT_SLEEP" -gt 0 ]]; then
|
||
notify_users
|
||
info "⏱ Waiting ${REBOOT_SLEEP}s before shutdown sequence"
|
||
sleep "$REBOOT_SLEEP"
|
||
fi
|
||
|
||
stop_docker
|
||
stop_vm_manager
|
||
sync_disks
|
||
|
||
reboot_system
|
||
|
||
# NOTE: system will not reach here unless dry-run
|
||
END_TIME=$(date +%s)
|
||
DURATION=$((END_TIME - START_TIME))
|
||
|
||
# SUMMARY
|
||
echo
|
||
echo "============================================================"
|
||
|
||
if [[ "$DRY_RUN" == true ]]; then
|
||
echo " 🟡 REBOOT SUMMARY"
|
||
echo "------------------------------------------------------------"
|
||
echo " ⏱ Delay: ${REBOOT_SLEEP}s"
|
||
echo " 📡 Status: 🟡 DRY RUN (no reboot executed)"
|
||
else
|
||
echo " 🔴 REBOOT SUMMARY"
|
||
echo "------------------------------------------------------------"
|
||
echo " ⚠️ Status: 🔴 SYSTEM SHOULD BE REBOOTING"
|
||
echo " ⏱ Duration: ${DURATION}s"
|
||
fi
|
||
|
||
echo "============================================================"
|
||
|
||
info "ℹ️ Reboot sequence complete (or handed off to system reboot)" |