feat: Enhance Plex Media Server management script with detailed status and loading animations

This commit is contained in:
Peter Wood
2025-05-25 23:50:45 -04:00
parent b8a3c98297
commit fbd0bf5852
3 changed files with 269 additions and 36 deletions

View File

@@ -6,7 +6,14 @@ alias gcm="git commit -m"
alias ll="ls -laFh --group-directories-first --color=auto" alias ll="ls -laFh --group-directories-first --color=auto"
alias findzombie="ps -A -ostat,pid,ppid | grep -e '[zZ]'" alias findzombie="ps -A -ostat,pid,ppid | grep -e '[zZ]'"
# 🎬 Plex Media Server Management - Sexy Edition
alias plex="/home/acedanger/shell/plex.sh" alias plex="/home/acedanger/shell/plex.sh"
alias px="/home/acedanger/shell/plex.sh" # Quick shortcut
alias plex-start="/home/acedanger/shell/plex.sh start" # Start Plex
alias plex-stop="/home/acedanger/shell/plex.sh stop" # Stop Plex
alias plex-restart="/home/acedanger/shell/plex.sh restart" # Restart Plex
alias plex-status="/home/acedanger/shell/plex.sh status" # Status check
alias plex-web="xdg-open http://localhost:32400/web" # Open web UI in browser
alias update="/home/acedanger/shell/update.sh" alias update="/home/acedanger/shell/update.sh"
alias dcdn="docker compose down" alias dcdn="docker compose down"
alias dcupd="docker compose up -d" alias dcupd="docker compose up -d"

View File

@@ -0,0 +1,24 @@
alias py=python3
alias gpull="git pull"
alias gpush="git push"
alias gc="git commit"
alias gcm="git commit -m"
alias ll="ls -laFh --group-directories-first --color=auto"
alias findzombie="ps -A -ostat,pid,ppid | grep -e '[zZ]'"
# 🎬 Plex Media Server Management - Sexy Edition
alias plex="/home/acedanger/shell/plex.sh"
alias px="/home/acedanger/shell/plex.sh" # Quick shortcut
alias plex-start="/home/acedanger/shell/plex.sh start" # Start Plex
alias plex-stop="/home/acedanger/shell/plex.sh stop" # Stop Plex
alias plex-restart="/home/acedanger/shell/plex.sh restart" # Restart Plex
alias plex-status="/home/acedanger/shell/plex.sh status" # Status check
alias plex-web="xdg-open http://localhost:32400/web" # Open web UI in browser
alias update="/home/acedanger/shell/update.sh"
alias dcdn="docker compose down"
alias dcupd="docker compose up -d"
alias dcpull="docker compose pull"
alias lzd="lazydocker"
alias cat="batcat"
alias fd="fdfind"
alias fzf="fzf --preview='batcat {}'"

260
plex.sh
View File

@@ -1,47 +1,249 @@
#!/bin/bash #!/bin/bash
# create bash shell script accepts parameters from the command line and performs an action for each parameter. the script will be used to start, stop, restart, and return the current status of the Plex Media Server # 🎬 Plex Media Server Management Script
PLEX_SERVICE="plexmediaserver" # A sexy, modern script for managing Plex Media Server with style
# Author: acedanger
# Version: 2.0
set -euo pipefail
# 🎨 Color definitions for sexy output
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly PURPLE='\033[0;35m'
readonly CYAN='\033[0;36m'
readonly WHITE='\033[1;37m'
readonly BOLD='\033[1m'
readonly DIM='\033[2m'
readonly RESET='\033[0m'
# 🔧 Configuration
readonly PLEX_SERVICE="plexmediaserver"
readonly SCRIPT_NAME="$(basename "$0")"
readonly PLEX_WEB_URL="http://localhost:32400/web"
# 🎭 Unicode symbols for fancy output
readonly CHECKMARK="✅"
readonly CROSS="❌"
readonly ROCKET="🚀"
readonly STOP_SIGN="🛑"
readonly RECYCLE="♻️"
readonly INFO=""
readonly HOURGLASS="⏳"
readonly SPARKLES="✨"
# 📊 Function to print fancy headers
print_header() {
echo -e "\n${PURPLE}${BOLD}╔══════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${PURPLE}${BOLD}${SPARKLES} PLEX MEDIA SERVER ${SPARKLES}${RESET}"
echo -e "${PURPLE}${BOLD}╚══════════════════════════════════════════════════════════════╝${RESET}\n"
}
# 🎉 Function to print completion footer
print_footer() {
echo -e "\n${DIM}${CYAN}╰─── Operation completed ${SPARKLES} ───╯${RESET}\n"
}
# 🎯 Function to print status with style
print_status() {
local status="$1"
local message="$2"
local color="$3"
echo -e "${color}${BOLD}[${status}]${RESET} ${message}"
}
# ⏱️ Function to show loading animation
show_loading() {
local message="$1"
local pid="$2"
local spin='-\|/'
local i=0
echo -ne "${CYAN}${HOURGLASS} ${message}${RESET}"
while kill -0 "$pid" 2>/dev/null; do
i=$(( (i+1) %4 ))
printf "\r${CYAN}${HOURGLASS} ${message} ${spin:$i:1}${RESET}"
sleep 0.1
done
printf "\r${CYAN}${HOURGLASS} ${message} ${CHECKMARK}${RESET}\n"
}
# 🚀 Enhanced start function
start_plex() { start_plex() {
sudo systemctl start $PLEX_SERVICE print_status "${ROCKET}" "Starting Plex Media Server..." "${GREEN}"
echo "Plex Media Server started."
if systemctl is-active --quiet "$PLEX_SERVICE"; then
print_status "${INFO}" "Plex is already running!" "${YELLOW}"
show_detailed_status
return 0
fi
sudo systemctl start "$PLEX_SERVICE" &
local pid=$!
show_loading "Initializing Plex Media Server" $pid
wait $pid
sleep 2 # Give it a moment to fully start
if systemctl is-active --quiet "$PLEX_SERVICE"; then
print_status "${CHECKMARK}" "Plex Media Server started successfully!" "${GREEN}"
echo -e "${DIM}${CYAN}Access your server at: ${WHITE}${PLEX_WEB_URL}${RESET}"
print_footer
else
print_status "${CROSS}" "Failed to start Plex Media Server!" "${RED}"
return 1
fi
} }
# 🛑 Enhanced stop function
stop_plex() { stop_plex() {
sudo systemctl stop $PLEX_SERVICE print_status "${STOP_SIGN}" "Stopping Plex Media Server..." "${YELLOW}"
echo "Plex Media Server stopped."
if ! systemctl is-active --quiet "$PLEX_SERVICE"; then
print_status "${INFO}" "Plex is already stopped!" "${YELLOW}"
return 0
fi
sudo systemctl stop "$PLEX_SERVICE" &
local pid=$!
show_loading "Gracefully shutting down Plex" $pid
wait $pid
if ! systemctl is-active --quiet "$PLEX_SERVICE"; then
print_status "${CHECKMARK}" "Plex Media Server stopped successfully!" "${GREEN}"
print_footer
else
print_status "${CROSS}" "Failed to stop Plex Media Server!" "${RED}"
return 1
fi
} }
# ♻️ Enhanced restart function
restart_plex() { restart_plex() {
sudo systemctl restart $PLEX_SERVICE print_status "${RECYCLE}" "Restarting Plex Media Server..." "${BLUE}"
echo "Plex Media Server restarted."
}
status_plex() { if systemctl is-active --quiet "$PLEX_SERVICE"; then
sudo systemctl status $PLEX_SERVICE
}
if [ $# -eq 0 ]; then
echo "Usage: $0 {start|stop|restart|status}"
exit 1
fi
case "$1" in
start)
start_plex
;;
stop)
stop_plex stop_plex
echo ""
fi
start_plex
}
# 📊 Enhanced status function with detailed info
show_detailed_status() {
local service_status
service_status=$(systemctl is-active "$PLEX_SERVICE" 2>/dev/null || echo "inactive")
echo -e "\n${BOLD}${BLUE}╔══════════════════════════════════════════════════════════════╗${RESET}"
echo -e "${BOLD}${BLUE}║ SERVICE STATUS ║${RESET}"
echo -e "${BOLD}${BLUE}╚══════════════════════════════════════════════════════════════╝${RESET}"
case "$service_status" in
"active")
print_status "${CHECKMARK}" "Service Status: ${GREEN}${BOLD}ACTIVE${RESET}" "${GREEN}"
# Get additional info
local uptime
uptime=$(systemctl show "$PLEX_SERVICE" --property=ActiveEnterTimestamp --value | xargs -I {} date -d {} "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "Unknown")
local memory_usage
memory_usage=$(systemctl show "$PLEX_SERVICE" --property=MemoryCurrent --value 2>/dev/null || echo "0")
if [[ "$memory_usage" != "0" ]] && [[ "$memory_usage" =~ ^[0-9]+$ ]]; then
memory_usage="$(( memory_usage / 1024 / 1024 )) MB"
else
memory_usage="Unknown"
fi
echo -e "${DIM}${CYAN} Started: ${WHITE}${uptime}${RESET}"
echo -e "${DIM}${CYAN} Memory Usage: ${WHITE}${memory_usage}${RESET}"
echo -e "${DIM}${CYAN} Web Interface: ${WHITE}${PLEX_WEB_URL}${RESET}"
echo -e "${DIM}${CYAN} Service Name: ${WHITE}${PLEX_SERVICE}${RESET}"
;; ;;
restart) "inactive")
restart_plex print_status "${CROSS}" "Service Status: ${RED}${BOLD}INACTIVE${RESET}" "${RED}"
echo -e "${DIM}${YELLOW} Use '${SCRIPT_NAME} start' to start the service${RESET}"
;; ;;
status) "failed")
status_plex print_status "${CROSS}" "Service Status: ${RED}${BOLD}FAILED${RESET}" "${RED}"
echo -e "${DIM}${RED} Check logs with: ${WHITE}journalctl -u ${PLEX_SERVICE}${RESET}"
;; ;;
*) *)
echo "Usage: $0 {start|stop|restart|status}" print_status "${INFO}" "Service Status: ${YELLOW}${BOLD}${service_status^^}${RESET}" "${YELLOW}"
;;
esac
# Show recent logs
echo -e "\n${DIM}${CYAN}┌─── Recent Service Logs ───┐${RESET}"
echo -e "${DIM}$(journalctl -u "$PLEX_SERVICE" --no-pager -n 3 --since "5 minutes ago" 2>/dev/null | tail -3 || echo "No recent logs available")${RESET}"
echo -e "${DIM}${CYAN}└────────────────────────────┘${RESET}"
}
# 🔧 Show available commands
show_help() {
echo -e "${BOLD}${WHITE}Usage:${RESET} ${CYAN}${SCRIPT_NAME}${RESET} ${YELLOW}<command>${RESET}"
echo ""
echo -e "${BOLD}${WHITE}Available Commands:${RESET}"
echo -e " ${GREEN}${BOLD}start${RESET} ${ROCKET} Start Plex Media Server"
echo -e " ${YELLOW}${BOLD}stop${RESET} ${STOP_SIGN} Stop Plex Media Server"
echo -e " ${BLUE}${BOLD}restart${RESET} ${RECYCLE} Restart Plex Media Server"
echo -e " ${CYAN}${BOLD}status${RESET} ${INFO} Show detailed service status"
echo -e " ${PURPLE}${BOLD}help${RESET} ${SPARKLES} Show this help message"
echo ""
echo -e "${DIM}${WHITE}Examples:${RESET}"
echo -e " ${DIM}${SCRIPT_NAME} start # Start the Plex service${RESET}"
echo -e " ${DIM}${SCRIPT_NAME} status # Show current status${RESET}"
echo ""
}
# 🎯 Main script logic
main() {
# Check if running as root
if [[ $EUID -eq 0 ]]; then
print_header
print_status "${CROSS}" "Don't run this script as root! Use your regular user account." "${RED}"
exit 1
fi
# Check if no arguments provided
if [[ $# -eq 0 ]]; then
print_header
show_help
exit 1
fi
# Show header for all operations except help
if [[ "${1,,}" != "help" ]] && [[ "${1,,}" != "--help" ]] && [[ "${1,,}" != "-h" ]]; then
print_header
fi
case "${1,,}" in # Convert to lowercase
"start")
start_plex
;;
"stop")
stop_plex
;;
"restart"|"reload")
restart_plex
;;
"status"|"info")
show_detailed_status
;;
"help"|"--help"|"-h")
print_header
show_help
;;
*)
print_status "${CROSS}" "Unknown command: ${RED}${BOLD}$1${RESET}" "${RED}"
echo ""
show_help
exit 1 exit 1
;; ;;
esac esac
}
# 🚀 Execute main function with all arguments
main "$@"