#!/bin/bash # Start/stop/restart sickchill. # Originally created for sickrage in 2016 # Updated to sickchill in 2023 # Copyright 2016-2024 Jeremy Hansen # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Set program name in case you want to run sick{beard|rage|gear|etc} PROG=${PROG:-sickchill} # If you want to have multiple instances of sickchill running, set # the suffix here. SUFFIX= # Set the full program name for folders if [ -n "$SUFFIX" ]; then FULLPROG="$PROG-$SUFFIX" # Just use $PROG if there isn't a suffix set else FULLPROG="$PROG" fi # Source SickRage configuration if [ -f /etc/"$FULLPROG".conf ]; then . /etc/"$FULLPROG".conf fi # Ensure all required variables are set in conf file # Edit conf file in /etc/$PROG-$SUFFIX.conf for any changes MISSING=0 for var in USERNAME HOMEDIR DATADIR PIDFILE PORT; do if [ -z "${!var}" ]; then ((MISSING++)) VAR="$var $VAR" fi done if [ $MISSING -gt 0 ]; then echo "/etc/$FULLPROG.conf is missing some or all required variables ($VAR)." echo "Please check the file and try again." fi # Check if the program is running and pid file exists check() { if pgrep "$PROG" > /dev/null; then # Check if the pidfile matches the running pid if [ -e "$PIDFILE" ] && pgrep -f "$PIDFILE" > /dev/null; then STATUS=running else # Check if the program is running without the pid file matching if pgrep -f "$FULLPROG.*$PORT" > /dev/null; then STATUS=broken echo "WARNING: $FULLPROG is running without the correct pid file." echo "Did you start it without using the rc.$FULLPROG?" else STATUS=stopped fi fi else STATUS=stopped fi } status() { if [ $STATUS == "running" ]; then echo "$FULLPROG currently running." elif [ $STATUS == "stopped" ]; then echo "$FULLPROG not running." elif [ $STATUS == "broken" ]; then echo "Please fix the issue before attempting to run $(basename "$0") again." else echo "Status unknown." fi } start() { if [ $STATUS == "stopped" ]; then if su "$USERNAME" -s /bin/sh -c "/usr/bin/${PROG} --daemon --pidfile=${PIDFILE} --datadir=${DATADIR} --port=${PORT} &> /dev/null"; then echo "Startup Successful" else su "$USERNAME" -s /bin/sh -c "/usr/bin/${PROG} --daemon --pidfile=${PIDFILE} --datadir=${DATADIR} --port=${PORT}" echo "Startup Failed. The following command is what produced the failure:" echo "su $USERNAME -s /bin/sh -c \"/usr/bin/${PROG} --daemon --pidfile=${PIDFILE} --datadir=${DATADIR} --port=${PORT}\"" fi else status fi } stop() { if [ $STATUS == "stopped" ]; then echo "$PROG doesn't seem to be running. Please try running" echo "$0 start" elif [ $STATUS == "broken" ]; then echo "Cannot stop. Please correct issue and try again." else if [ "$EUID" -ne 0 ];then echo "Please run as root" exit 1 fi echo -n $"Shutting down $PROG: " curl -s http://localhost:"$PORT"/home/shutdown/?pid="$(cat "$PIDFILE")" | grep -q "shutting down" # sickchill can take some time to properly shut down. #Give it 10 seconds before forcing it to close. TIMEOUT=10 for (( COUNT=0; COUNT <= TIMEOUT; COUNT++ )); do if pgrep -f "$FULLPROG.*$PORT" > /dev/null; then SHUTDOWN=success break fi sleep 1 done if [ "$SHUTDOWN" == "success" ]; then echo "Shutdown successful." else echo "Normal Shutdown Failed - Attempting to kill the process." sleep 7 pkill -9 -F "$PIDFILE" fi fi } case "$1" in start) check start ;; stop) check stop ;; restart) check stop start ;; status) check status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac