pyLoad rc Script für FreeBSD

Seit einigen Monaten setze ich pyload als Downloadmanager auf meinem Server ein und bin damit, abgesehen von ein paar Bugs, ganz zufrieden. Was mich jedoch arg gestört hat, ist das Fehlen eines rc Scripts. Deswegen hatte ich mich mit dem Thema etwas auseinander gesetzt, mir vorhandene Skripte angeschaut und eins zusammengestellt. Sicherlich ist das Skript noch verbesserungswürdig, aber es ist immerhin ein Anfang und funktioniert bisher ohne Probleme (getestet unter 10.0-RELEASE).

Folgende Parameter kennt das Script:

  • pyload_enable (Default: NO)
  • pyload_flags (Default: --daemon)
  • pyload_path (Default: /usr/local/etc/${name})
  • pyload_pid (Default: /var/run/${name}.pid)
  • pyload_user (Default: pyload)

Abgelegt wird das Script unter /usr/local/etc/rc.d/pyload, im Anschluss die Dateirechte anpassen, die entsprechenden Parameter in der rc.conf eintragen/anpassen und das Shebang in pyLoadCore.py zu #!/usr/local/bin/python ändern. Danach kann der Service mittels service pyload start gestartet werden.

#!/bin/sh

# $FreeBSD$
#
# PROVIDE:	pyload
# REQUIRE:	LOGIN
# KEYWORD:	shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service and change the shebang in pyLoadCory.py to: #!/usr/local/bin/python
#  pyload_enable="YES"
#  # Optional
#  pyload_path="/usr/local/etc/pyload"
#  pyload_flags="--daemon"
#  pyload_pid="/var/run/pyload.pid"
#  pyload_user="pyload"

. "/etc/rc.subr"

PATH="$PATH:/usr/local/bin"

name=pyload
rcvar=${name}_enable
load_rc_config $name

: ${pyload_enable:="NO"}
: ${pyload_flags:="--daemon"}
: ${pyload_path:="/usr/local/etc/${name}"}
: ${pyload_pid:="/var/run/${name}.pid"}
: ${pyload_user:="pyload"}

required_files="${pyload_path}/pyload.conf"
pidfile="${pyload_pid}"

command_interpreter="/usr/local/bin/python"
command="${pyload_path}/pyLoadCore.py"
command_args="--pidfile=${pidfile} --configdir=${pyload_path}"
command_full="${command_interpreter} ${command} ${command_args}"

start_cmd="su -m ${pyload_user} -c '${command_full} ${pyload_flags}'"
stop_cmd="su -m ${pyload_user} -c '${command_full} --quit'"

run_rc_command "$1"