#!/usr/bin/env bash VERS='3.10.9-11282025' MMFOLDER="/opt/idssys/mediamanager" TMPFOLDER="${MMFOLDER}/.tmp" LOGFOLDER="${MMFOLDER}/logs" [ ! -d ${TMPFOLDER} ] && mkdir ${TMPFOLDER} [ ! -d ${LOGFOLDER} ] && mkdir ${LOGFOLDER} MMSRV=$(/bin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) # NM_FOLDER="/opt/idssys/nodemgmt" # [ -f ${NM_FOLDER}/conf/defaults.local.inc ] && source ${NM_FOLDER}/defaults.inc AVAILSERVICES=bazarr,jackett,lidarr,ombi,snap.overseerr.daemon,prowlarr,qbittorrent,radarr,radarr3d,readarr,sonarr,snap.tautulli.tautulli,huntarr,cleanuparr UPDATESERVICES=bazarr,jackett,lidarr,ombi,organizr,prowlarr,qbittorrent,radarr,readarr,sonarr,cleanuparr BETA_SERVICES=" readarr " MM_LOGFILE=${LOGFOLDER}/logfile MM_OUTPUT_LOGFILE=${LOGFOLDER}/outputs.check.log MM_BACKUP_FOLDER='/opt/!MM-Service-Backups' ([ -z ${MM_VPN_RESTART+x} ] || [ ${MM_VPN_RESTART} -gt 85800 ]) && MM_VPN_RESTART=85800 [ ! -f ${MM_LOGFILE} ] && touch ${MM_LOGFILE} [ ! -f ${MM_OUTPUT_LOGFILE} ] && touch ${MM_OUTPUT_LOGFILE} [ ! -d ${MM_BACKUP_FOLDER} ] && mkdir ${MM_BACKUP_FOLDER} IFS=, ADD_ROUTES=(${ADDROUTES}) AVAIL_SERVICES=(${AVAILSERVICES}) UPDATE_SERVICES=(${UPDATESERVICES}) SERVICES_CHECK=(${SERVICESCHECK}) unset IFS noheader=' check noup update update-organizr cron ' allowrun=' status update stop vpninfo ' declare -A MM_SERVICES MM_SERVICES['openvpn']='OpenVPN (TorGuard VPN Tunnel)' MM_SERVICES['wireguard']='WireGuard (TorGuard VPN Tunnel)' MM_SERVICES['bazarr']='Bazarr (Subtitle Manager)' MM_SERVICES['jackett']='Jackett (Torrent Indexing Manager)' MM_SERVICES['lidarr']='Lidarr (Music Manager)' MM_SERVICES['ombi']='Ombi (Download Requester)' MM_SERVICES['snap.overseerr.daemon']='Overseerr (Download Requester)' MM_SERVICES['qbittorrent']='qBittorrent (Torrent Downloader)' MM_SERVICES['prowlarr']='Prowlarr (Torrent Indexing Manager)' MM_SERVICES['radarr']='Radarr (Movies Manager)' MM_SERVICES['radarr3d']='Radarr3D (3D Movies Manager)' MM_SERVICES['readarr']='Readarr (Books Manager)' MM_SERVICES['sonarr']='Sonarr (TV Shows Manager)' MM_SERVICES['snap.tautulli.tautulli']='Tautulli (Plex Stats)' MM_SERVICES['huntarr']='Huntarr (Hunts Missing/HQ Media)' MM_SERVICES['cleanuparr']='Cleanuparr (Media Management Cleanser)' declare -A MM_SERVICE_PORTS MM_SERVICE_PORTS['ombi']='5000' MM_SERVICE_PORTS['radarr']='5555' MM_SERVICE_PORTS['radarr3d']='5556' MM_SERVICE_PORTS['sonarr']='5656' MM_SERVICE_PORTS['qbittorrent']='5858' MM_SERVICE_PORTS['snap.tautulli.tautulli']='8181' MM_SERVICE_PORTS['snap.overseerr.daemon']='5055' MM_SERVICE_PORTS['lidarr']='8686' MM_SERVICE_PORTS['jackett']='9117' MM_SERVICE_PORTS['bazarr']='6767' MM_SERVICE_PORTS['prowlarr']='9696' MM_SERVICE_PORTS['readarr']='8787' MM_SERVICE_PORTS['huntarr']='9705' MM_SERVICE_PORTS['cleanuparr']='11011' declare -A MM_SERVICE_CFG MM_SERVICE_CFG['ombi']='/etc/Ombi' MM_SERVICE_CFG['radarr']='/home/user/.config/Radarr' MM_SERVICE_CFG['radarr3d']='/home/user/.config/Radarr3D' MM_SERVICE_CFG['sonarr']='/home/user/.config/Sonarr' MM_SERVICE_CFG['qbittorrent']='/home/user/.config/qBittorrent' MM_SERVICE_CFG['snap.tautulli.tautulli']='/root/snap/tautulli' MM_SERVICE_CFG['lidarr']='/home/user/.config/Lidarr' MM_SERVICE_CFG['jackett']='/home/user/.config/Jackett' MM_SERVICE_CFG['prowlarr']='/home/user/.config/Prowlarr' MM_SERVICE_CFG['readarr']='/home/user/.config/Readarr' MM_SERVICE_CFG['bazarr']='' MM_SERVICE_CFG['huntarr']='/home/user/.config/huntarr' MM_SERVICE_CFG['cleanuparr']='/opt/cleanuparr/config' declare -A MM_SERVICE_APP MM_SERVICE_APP['qbittorrent']='none' MM_SERVICE_APP['radarr3d']='none' MM_SERVICE_APP['sonarr']='/usr/lib/sonarr/bin' MM_SERVICE_APP['snap.tautulli.tautulli']='/snap/tautulli/current' declare -A MM_UPDATE_REPO #MM_UPDATE_REPO['ombi']='Ombi-app' MM_UPDATE_REPO['ombi']='systemd' MM_UPDATE_REPO['radarr']='radarr' # MM_UPDATE_REPO['sonarr']='sonarr' MM_UPDATE_REPO['sonarr']='systemd' MM_UPDATE_REPO['lidarr']='lidarr' MM_UPDATE_REPO['jackett']='jackett' MM_UPDATE_REPO['bazarr']='morpheus65535' MM_UPDATE_REPO['organizr']='git' MM_UPDATE_REPO['qbittorrent']='systemd' MM_UPDATE_REPO['prowlarr']='prowlarr' MM_UPDATE_REPO['readarr']='readarr' MM_UPDATE_REPO['cleanuparr']='cleanuparr' # MM_UPDATE_REPO['huntarr']='huntarr' declare -A MM_UPDATE_REPO_GREP MM_UPDATE_REPO_GREP['ombi']='linux-x64' MM_UPDATE_REPO_GREP['radarr']='linux-core-x64' MM_UPDATE_REPO_GREP['sonarr']='linux-core-x64' MM_UPDATE_REPO_GREP['lidarr']='linux-core-x64' MM_UPDATE_REPO_GREP['jackett']='LinuxAMDx64' MM_UPDATE_REPO_GREP['bazarr']='zip' MM_UPDATE_REPO_GREP['prowlarr']='linux-core-x64' MM_UPDATE_REPO_GREP['readarr']='linux-core-x64' MM_UPDATE_REPO_GREP['cleanuparr']='linux-amd64' if [ "${VPN_INTERFACE}" = "tun0" ]; then #openvpn VPN_START=(/bin/systemctl start openvpn) VPN_STOP=(/bin/systemctl stop openvpn) else #default wireguard VPN_START=(sudo /usr/bin/wg-quick up ${VPN_INTERFACE}) VPN_STOP=(sudo /usr/bin/wg-quick down ${VPN_INTERFACE}) fi DEBUGLOGSTOP(){ chktmend=`date +%s` # chktm=$((chktmend-chktmstart)) # echo "$(date) - ${mmsv} Runtime: ${chktm}s" >> ${MM_LOGFILE} } MMUPDATECHECK(){ if curl -m 15 -s --head --request GET https://git.schroedercity.com | grep "HTTP/2 200" > /dev/null; then cd /opt/idssys/mediamanager if [ "`git log --pretty=%H ...refs/heads/master^ | head -n 1`" != "`git ls-remote origin -h refs/heads/master |cut -f1`" ]; then touch ${TMPFOLDER}/update.available else /bin/rm -f ${TMPFOLDER}/update.available fi else /bin/rm -f ${TMPFOLDER}/update.available fi } SENDNOTICE(){ [ "${EMAIL_NOTICE}" != "" ] && echo -e "${2}\n\n$(date)" | mail -s "${1}" ${EMAIL_NOTICE} [ "${PUSHOVER_APP_TOKEN}" != "" ] && PUSH_TO_MOBILE "${2} $(date)" "${1}" ${3} } uptime_minutes() { set `uptime -p` local minutes=0 shift while [ -n "$1" ]; do case $2 in day*) ((minutes+=$1*1440));; hour*) ((minutes+=$1*60));; minute*) ((minutes+=$1));; esac shift shift done echo $minutes } declare -A SYSTEMD_CONF SYSTEMD_CONF['prowlarr']="[Unit] Description=Prowlarr Daemon After=syslog.target network.target [Service] User=user Group=users Type=simple ExecStart=/opt/Prowlarr/Prowlarr -nobrowser -data=/home/user/.config/Prowlarr/ TimeoutStopSec=20 KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target "