ports/164502: [patch] sabnzbd not starting on boot
Tom
tgord at mm.st
Thu Jan 26 03:20:01 UTC 2012
>Number: 164502
>Category: ports
>Synopsis: [patch] sabnzbd not starting on boot
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jan 26 03:20:01 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Tom
>Release: 9.0-RELEASE
>Organization:
>Environment:
FreeBSD sivert 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
sabnzbd was not starting on boot despite rc.conf containing the required 'sabnzbd_enable="YES"' and the manual execution of 'service sabnzbd start' working just fine. Service logs did not contain any abnormal (and therefore useful) information
>How-To-Repeat:
Install sabnzbdplus from ports, set it up to start on boot and observe when it (presumably) doesn't. There might be some variability here as I've seen reports on the forum of it 'suddenly working' when other ports are installed with services enabled at boot time.
>Fix:
Per http://forums.freebsd.org/showthread.php?t=28310, adding 'REQUIRE: LOGIN cleanvar' seems to do the trick, though I don't grasp what this is *actually* requiring and can't seem to find the provider myself (this is probably mostly due to my current ineptitude). I've attached my modified startup script for consideration.
Patch attached with submission follows:
#!/bin/sh
#
# REQUIRE: LOGIN cleanvar
# PROVIDE: sabnzbd
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# sabnzbd_enable (bool): Set to NO by default.
# Set it to YES to enable it.
# sabnzbd_conf_dir: Directory where sabnzbd configuration
# data is stored.
# Default: /usr/local/sabnzbd
# sabnzbd_user: The user account sabnzbd daemon runs as what
# you want it to be. It uses '_sabnzbd' user by
# default. Do not sets it as empty or it will run
# as root.
# sabnzbd_group: The group account sabnzbd daemon runs as what
# you want it to be. It uses '_sabnzbd' group by
# default. Do not sets it as empty or it will run
# as wheel.
. /etc/rc.subr
name="sabnzbd"
rcvar=sabnzbd_enable
load_rc_config ${name}
: ${sabnzbd_enable:="NO"}
: ${sabnzbd_user:="_sabnzbd"}
: ${sabnzbd_group:="_sabnzbd"}
: ${sabnzbd_conf_dir:="/usr/local/sabnzbd"}
required_dirs=${sabnzbd_conf_dir}
start_cmd="${name}_start"
#start_postcmd="${name}_poststart"
status_cmd="${name}_status"
stop_cmd="${name}_stop"
start_precmd=sabnzbd_check_dir
sabnzbd_start()
{
if [ ! -f "${sabnzbd_pid}" ]; then
su -m ${sabnzbd_user} -c "/usr/local/bin/SABnzbd.py --daemon -f ${sabnzbd_conf_dir}/sabnzbd.ini"
echo "Starting ${name}."
else
GETPROCESSPID=`/bin/ps -auxw | /usr/bin/awk '/SABnzbd.py/ && !/awk/ && !/sh/ {print $2}'`
PIDFROMFILE=`cat ${sabnzbd_pid}`
if [ "$GETPROCESSPID" = "$PIDFROMFILE" ]; then
echo "${name} already running with PID: ${PIDFROMFILE} ?"
echo "Remove ${sabnzbd_pid} manually if needed."
else
rm -f ${sabnzbd_pid}
su -m ${sabnzbd_user} -c "/usr/local/bin/SABnzbd.py --daemon -f ${sabnzbd_conf_dir}/sabnzbd.ini"
echo "Starting ${name}."
fi
fi
}
#sabnzbd_poststart() {
# echo `/bin/ps -auxw | /usr/bin/awk '/SABnzbd.py/ && !/awk/ {print $2}'` > $sabnzbd_pid
#}
# SABnzbd can only be cleanly stopped by calling the http api
sabnzbd_stop() {
echo "Stopping $name"
if [ -f "${sabnzbd_conf_dir}/sabnzbd.ini" ]; then
apikey=`grep ^api_key ${sabnzbd_conf_dir}/sabnzbd.ini | tr -d " _"`
host=`grep -m1 -E '^host\ =\ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ${sabnzbd_conf_dir}/sabnzbd.ini | tr -dc '[0-9].'`
if [ ${host} = "0.0.0.0" ] ; then host="localhost" ; fi
port=`grep -m1 ^port ${sabnzbd_conf_dir}/sabnzbd.ini | tr -dc '[0-9]'`
fetch -o /dev/null "http://${host}:${port}/api?mode=shutdown&${apikey}" > /dev/null 2>&1
else
sabnzbd_pid=`ps -U ${sabnzbd_user} | grep "python.*SABnzbd.py.*--daemon" | grep -v 'grep' | awk '{print $1}'`
if [ -n "${sabnzbd_pid}" ]; then
kill ${sabnzbd_pid}
fi
fi
}
sabnzbd_status() {
sabnzbd_pid=`ps -U ${sabnzbd_user} | grep "python.*SABnzbd.py.*--daemon" | grep -v 'grep' | awk '{print $1}'`
if [ -n "${sabnzbd_pid}" ]; then
echo "$name is running as ${sabnzbd_pid}"
else
echo "$name is not running"
fi
}
sabnzbd_check_dir() {
if [ ! -f "${required_dirs}" -a ! -d "${required_dirs}" -a ! -L "${required_dirs}" ]; then
mkdir -p ${required_dirs}
chown ${sabnzbd_user}:${sabnzbd_group} ${required_dirs}
fi
}
run_rc_command "$1"
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list