|
|
|
#!/bin/sh
|
|
|
|
#
|
|
|
|
# DON'T EDIT THIS FILE DIRECTLY!
|
|
|
|
#
|
|
|
|
# Instead, create your own configuration by setting any of the 7 variables
|
|
|
|
# listed below in /etc/default/couchpotato. For example: adding CP_USER=noob
|
|
|
|
# to /etc/default/couchpotato makes the service run under the 'noob' account,
|
|
|
|
# overruling the default value of 'couchpotato'.
|
|
|
|
#
|
|
|
|
# Accepted variables with default values -if any- in parentheses:
|
|
|
|
# CP_USER # username to run couchpotato under (couchpotato)
|
|
|
|
# CP_HOME # directory of CouchPotato.py (/opt/couchpotato)
|
|
|
|
# CP_DATA # directory of couchpotato's db, cache and logs (/var/opt/couchpotato)
|
|
|
|
# CP_PIDFILE # full path of couchpotato.pid (/var/run/couchpotato/couchpotato.pid)
|
|
|
|
# PYTHON_BIN # full path of the python binary (/usr/bin/python)
|
|
|
|
# CP_OPTS # extra cli options for couchpotato, see 'CouchPotato.py --help'
|
|
|
|
# SSD_OPTS # extra options for start-stop-daemon, see 'man start-stop-daemon'
|
|
|
|
|
|
|
|
### BEGIN INIT INFO
|
|
|
|
# Provides: couchpotato
|
|
|
|
# Required-Start: $network $remote_fs
|
|
|
|
# Required-Stop: $network $remote_fs
|
|
|
|
# Should-Start: $named deluged network-manager nzbget qbittorrent-nox sabnzbdplus transmission-daemon
|
|
|
|
# Should-Stop: $named deluged network-manager nzbget qbittorrent-nox sabnzbdplus transmission-daemon
|
|
|
|
# Default-Start: 2 3 4 5
|
|
|
|
# Default-Stop: 0 1 6
|
|
|
|
# Short-Description: CouchPotato PVR for Usenet and torrents
|
|
|
|
# Description: starts instance of CouchPotato using start-stop-daemon
|
|
|
|
### END INIT INFO
|
|
|
|
|
|
|
|
DESC=CouchPotato
|
|
|
|
CONFIG=/etc/default/couchpotato
|
|
|
|
|
|
|
|
# don't accept config vars from the shell environment
|
|
|
|
unset CP_USER CP_HOME CP_DATA CP_PIDFILE PYTHON_BIN CP_OPTS SSD_OPTS
|
|
|
|
|
|
|
|
# source lsb init functions
|
|
|
|
. /lib/lsb/init-functions
|
|
|
|
|
|
|
|
# try loading the configuration file
|
|
|
|
[ -r "$CONFIG" ] && . "$CONFIG" \
|
|
|
|
|| log_action_msg "$DESC: $CONFIG unreadable, falling back to default settings"
|
|
|
|
|
|
|
|
# assorted settings and their defaults
|
|
|
|
: "${CP_USER:=couchpotato}"
|
|
|
|
: "${CP_HOME:=/opt/couchpotato}"
|
|
|
|
: "${CP_DATA:=/var/opt/couchpotato}"
|
|
|
|
: "${CP_PIDFILE:=/var/run/couchpotato/couchpotato.pid}"
|
|
|
|
: "${PYTHON_BIN:=/usr/bin/python}"
|
|
|
|
|
|
|
|
# basic sanity checks
|
|
|
|
([ -x "$PYTHON_BIN" ] && [ -f "$CP_HOME/CouchPotato.py" ]) || {
|
|
|
|
log_failure_msg "$DESC: init script setup failed basic sanity checks, aborting!";
|
|
|
|
# exit zero since this condition may also occur after a user
|
|
|
|
# uninstalled cp while leaving this script in place.
|
|
|
|
exit 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
start_cp() {
|
|
|
|
# create directories with sensible ownership and permissions
|
|
|
|
# (but refuse to touch any pre-existing ones)
|
|
|
|
for D in "$(dirname "$CP_PIDFILE")" "$CP_DATA"; do
|
|
|
|
[ ! -d "$D" ] && {
|
|
|
|
install --directory --owner="$CP_USER" --group=root --mode=0750 "$D" || exit 1;
|
|
|
|
}
|
|
|
|
done
|
|
|
|
|
|
|
|
# # for backwards compatibility create an empty pidfile so it
|
|
|
|
# # can be in any pre-existing directory, even those unwritable
|
|
|
|
# # for the $CP_USER. PEBCAK?
|
|
|
|
# [ ! -e "$CP_PIDFILE" ] && {
|
|
|
|
# touch "$CP_PIDFILE" && \
|
|
|
|
# chmod 0600 "$CP_PIDFILE" && \
|
|
|
|
# chown "$CP_USER" "$CP_PIDFILE" \
|
|
|
|
# || exit 1;
|
|
|
|
# }
|
|
|
|
|
|
|
|
log_daemon_msg "Starting $DESC"
|
|
|
|
start-stop-daemon --start --quiet --pidfile "$CP_PIDFILE" --chdir "$CP_HOME" --chuid "$CP_USER" --oknodo --exec "$PYTHON_BIN" $SSD_OPTS -- \
|
|
|
|
CouchPotato.py --daemon --quiet --pid_file="$CP_PIDFILE" --data_dir="$CP_DATA" $CP_OPTS
|
|
|
|
log_end_msg $? || exit $?
|
|
|
|
}
|
|
|
|
|
|
|
|
stop_cp() {
|
|
|
|
log_daemon_msg "Stopping $DESC"
|
|
|
|
# for security reasons, require the process to be both:
|
|
|
|
# 1) listed in the pidfile and 2) running as $CP_USER
|
|
|
|
start-stop-daemon --stop --quiet --pidfile "$CP_PIDFILE" --user "$CP_USER" --retry 15 --oknodo
|
|
|
|
log_end_msg $? || exit $?
|
|
|
|
}
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
start)
|
|
|
|
start_cp;;
|
|
|
|
stop)
|
|
|
|
stop_cp;;
|
|
|
|
restart|force-reload)
|
|
|
|
stop_cp && start_cp;;
|
|
|
|
status)
|
|
|
|
status_of_proc -p "$CP_PIDFILE" "$PYTHON_BIN" "$DESC"
|
|
|
|
exit $?;;
|
|
|
|
*)
|
|
|
|
echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
|
|
|
|
exit 3;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
exit 0
|