Version 13 (modified by .faust, 14 years ago) (diff)

--

Deluge Init Scripts

  1. What is an init script?
  2. Init Scripts Based On Distribution
    1. Debian/Ubuntu? Init Script
    2. Fedora Init Script
    3. Mandriva Init Script
    4. OpenSuse Init Script
    5. FreeBSD Init Script

Scripts found on this page, were originally posted here.

What is an init script?

Init Scripts Based On Distribution

Debian/Ubuntu? Init Script

All of this is copied from http://apocryph.org/2008/11/30/setting_deluge_headless_ubuntu_seedbox_windows_client/ Go there for more detailed information.

Put this in /etc/default/deluge-daemon and set DELUGED_USER to the user you which to run deluge as

# Configuration for /etc/init.d/deluge-daemon

# The init.d script will only run if this variable non-empty.
DELUGED_USER=""             # !!!CHANGE THIS!!!!

# Should we run at startup?
RUN_AT_STARTUP="YES"

This should be placed in /etc/init.d/deluge-daemon

#!/bin/sh
### BEGIN INIT INFO
# Provides:          deluge-daemon
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Daemonized version of deluge and webui.
# Description:       Starts the deluge daemon with the user specified in
#                    /etc/default/deluge-daemon.
### END INIT INFO

# Author: Adolfo R. Brandes 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d"             # Consult `man deluged` for more options
DAEMON2=/usr/bin/deluge-web
DAEMON2_ARGS=""               # Consult `man deluge-web` for more options
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
UMASK=22                      # Change this to 0 if running deluged as its own user
PKGNAME=deluge-daemon
SCRIPTNAME=/etc/init.d/$PKGNAME

# Exit if the package is not installed
[ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
then
   log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
   exit 0
fi

if [ -z "$DELUGED_USER" ]
then
    log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
    exit 0
fi

#
# Function that starts the daemon/service
#
do_start()
{
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started
   start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --exec $DAEMON1 \
      --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK --test > /dev/null
   RETVAL1="$?"
   start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --exec $DAEMON2 \
      --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK --test > /dev/null
   RETVAL2="$?"
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 1

   start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile --exec $DAEMON1 \
      --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS
   RETVAL1="$?"
        sleep 2
   start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile --exec $DAEMON2 \
      --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
   RETVAL2="$?"
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred

   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2
   RETVAL2="$?"
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
   RETVAL1="$?"
   [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2

   rm -f $PIDFILE1 $PIDFILE2

   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
}

case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  restart|force-reload)
   log_daemon_msg "Restarting $DESC" "$NAME1"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
        # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac

:

Make the script executable by root

sudo chmod 755 /etc/init.d/deluge-daemon

Run this script on start up

sudo update-rc.d deluge-daemon defaults

Start the daemon

sudo /etc/init.d/deluge-daemon start

Fedora Init Script

#!/bin/bash
# chkconfig: 345 85 15
# description: deluged is the Deulge bit torrent daemon. It performs downloads and manages torrents. Connect to the service through the configured port.
# Script to manage start and stopping the fedora service
# processname: deluged

    # Source function library.
    . /etc/init.d/functions

    RETVAL=0;

    start() {
        echo "Starting deluged service"
        daemon --user=deluge deluged -c /storage/fileshare/Torrents/.deluge/ -p 58846 -l /storage/fileshare/Torrents/.deluge/deluged.log
        RETVAL1=$?
        echo
        [ $RETVAL1 = 0 ] && touch /var/lock/subsys/deluged
        
        echo "Starting deluge webui"
        #daemon --user=deluge deluge -u web -c /storage/fileshare/Torrents/.deluge/ -l /storage/fileshare/Torrents/.deluge/deluge-web.log
        #deluge -u web -c /storage/fileshare/Torrents/.deluge/ -q &
        #cant find force background option in daemon function, so I add my own &
        runuser -s /bin/bash - deluge -c "ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0} >/dev/null 2>&1 ; deluge -u web -c /storage/fileshare/Torrents/.deluge/ -l /storage/fileshare/Torrents/.deluge/deluge-web.log &"
        [ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"

        RETVAL2=$?
        echo
        [ $RETVAL2 = 0 ] && touch /var/lock/subsys/deluge-web
   
        RETVAL=1
        if [ $RETVAL1 == 0 ]; then
            if [ $RETVAL2 == 0 ]; then
                RETVAL=0
            fi
        fi
        return $RETVAL
    }

    stop() {
        echo "Stopping deluge webui"
        killproc deluge
        RETVAL1=$?
        echo
        [ $RETVAL1 = 0 ] && rm -f /var/lock/subsys/deluge-web

        echo "Stopping deluged service"
        killproc deluged
        RETVAL2=$?
        echo
        [ $RETVAL2 = 0 ] && rm -f /var/lock/subsys/deluged
    }

    restart() {
        stop
        start
    }

case $1 in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    status)
        status deluged
        status deluge
        RETVAL=$?
    ;;
    *)
    echo $"Usage: $0 {start|stop|restart|status}"
    exit 1
esac

    exit $RETVAL

Mandriva Init Script

#!/bin/bash
#
# Startup script for the deluged daemon
#
# chkconfig: 2345 84 09
#
# description: deluged is the Deluge bit torrent daemon. It performs downloads and manages torrents. Connect to the service through the configured port.
# Script to manage start and stopping the fedora service
# processname: deluged

### BEGIN INIT INFO
# Provides: deluged
# Should-Start:   $network
# Should-Stop:    $network
# Required-Start: $local_fs
# Required-Stop:  $local_fs
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: shadok
# Description: shadok is the Deluge bit torrent daemon. It performs downloads and manages torrents. Connect to the service through the configured port.
# Script to manage start and stopping the fedora service
# processname: deluged
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

# Check that networking is up.
. /etc/sysconfig/network
[ "${NETWORKING}" = "no" ] && exit 0

DAEMON='deluged'
ACCOUNT='deluge'
HOME='/var/share/deluge'
# ----------- naming convention -----------

LOG="/var/log/$DAEMON"
PIDF="/var/run/${DAEMON}.pid"
LOCK="/var/lock/subsys/$DAEMON"
# ----------- basic checks -----------

[ ! -d "${HOME}" ] &&  gprintf "Can't find home %s, exit.\n" "${HOME}" && exit 1
[ -x '/usr/bin/deluged' -a -x '/usr/bin/deluge' ] || exit 0
#

case "$1" in
  daemon_start ) # real start
    [ `id -un` != "$ACCOUNT" ] && [ "$2" != '--test' ] && exit 3

    /usr/bin/deluged -c $HOME/.deluge/  -l $LOG -P $PIDF
    RETVAL=$?
    if [ $RETVAL -eq 0 ] ; then
       /usr/bin/deluge -u web -c $HOME/.deluge/ > $HOME/weluge.log 2>&1  &
       RETVAL=$?
       echo $!  >>  $PIDF
    fi
    ;;
  start)
    gprintf "Starting $DAEMON daemon: "
    touch  $LOG $PIDF
    chown $ACCOUNT:`id -g $ACCOUNT` $LOG $PIDF
    daemon -9 --user=$ACCOUNT --check $DAEMON /bin/ionice -c 3 $0 daemon_start
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch $LOCK
    ;;
  stop | smooth-stop)
    gprintf "Shutting down $DAEMON daemon: "
    [ -r "$PIDF" ] && pid=`cat $PIDF` 2>/dev/null
    #
    # kill first, think later
    #
    kill -TERM $pid >/dev/null 2>&1
    #
    # Saving state takes time: 10 sec
    #
    timeout=10
    for p in $pid ; do
       kill -s 0 $p 2>/dev/null
       for ((  ; 0==$?  && 0<$timeout ; timeout=$timeout - 1 )) do
          echo -n '.'
          sleep 1
          kill -s 0 $p 2>/dev/null
       done
    done
    if [ "$timeout" -eq 0 ] ; then
        failure "%s shutdown" $DAEMON
        kill -KILL $pid >/dev/null 2>&1
        RETVAL=1
    else
        success "%s shutdown" $base
        rm -f $LOCK
        RETVAL=0
    fi
    echo
    ;;
  hard-stop)
    gprintf "Fast stopping $DAEMON daemon: "
    #
    # no time to save state
    #
    killproc -d 1 $DAEMON
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f $LOCK
    ;;
  status)
    status $DAEMON
    RETVAL=$?
    ;;
  restart|reload)
    $0 stop
    $0 start
    ;;
  condrestart)
    [ -f $LOCK ] && $0 restart || status $DAEMON
    ;;
  *)
    gprintf "Usage: %s {start|stop|smooth-stop|hard-stop|status|restart}\n" "$0"
    RETVAL=1
    ;;
esac

exit $RETVAL

OpenSuse Init Script

Deluged

#! /bin/sh
# Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany.
#
# Author: José Ferrandis
#
# /etc/init.d/deluged
#
#   and symbolic its link
#
# /usr/sbin/deluged
#
### BEGIN INIT INFO
# Provides: deluged
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network

# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Daemonized version of deluge.
# Description:       Starts the deluge daemon.
### END INIT INFO

DELUGED_BIN=/usr/bin/deluged

test -x $DELUGED_BIN || exit 5

DELUGED_USER="deluge"        # CHANGE THIS
test -n "$DELUGED_USER" || exit 6

DELUGED_PIDFILE=~/.config/deluge/deluged.pid

DELUGED_ARGS="-P DELUGED_PIDFILE" # consult man deluged for more options

. /etc/rc.status

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status

# First reset status of this service
rc_reset

case "$1" in
    start)
        
        echo -n "Starting DELUGE daemon"
        ## Start daemon with startproc(8). If this fails
        ## the echo return value is set appropriate.

        startproc -p $DELUGED_PIDFILE -u $DELUGED_USER $DELUGED_BIN $DELUGED_ARGS

        # Remember status and be verbose
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down DELUGE daemon"
        ## Stop daemon with killproc(8) and if this fails
        ## set echo the echo return value.

        killproc -TERM $DELUGED_BIN

        # Remember status and be verbose
        rc_status -v
        ;;
    try-restart)
        ## Stop the service and if this succeeds (i.e. the 
        ## service was running before), start it again.
        $0 status >/dev/null &&  $0 restart

        # Remember status and be quiet
        rc_status
        ;;
    restart)
        ## Stop the service and regardless of whether it was
        ## running or not, start it again.
        $0 stop
        $0 start

        # Remember status and be quiet
        rc_status
        ;;
    force-reload|reload)
        ## Signal the daemon to reload its config. Most daemons
        ## do this on signal 1 (SIGHUP).

        echo -n "Reload service DELUGED"

        killproc -HUP $DELUGED_BIN

        rc_status -v

        ;;
    status)
        echo -n "Checking for service DELUGED "
        ## Check status with checkproc(8), if process is running
        ## checkproc will return with exit status 0.

        # Status has a slightly different for the status command:
        # 0 - service running
        # 1 - service dead, but /var/run/  pid  file exists
        # 2 - service dead, but /var/lock/ lock file exists
        # 3 - service not running

        checkproc $DELUGED_BIN

        rc_status -v
        ;;
    probe)
        ## Optional: Probe for the necessity of a reload,
        ## give out the argument which is required for a reload.

        ;;
    *)
        echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
        exit 1
        ;;
esac
rc_exit

Web UI

#! /bin/sh
# Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany.
#
# Author: José Ferrandis
#
# /etc/init.d/deluge-webd
#
#   and symbolic its link
#
# /usr/sbin/deluge-webd
#
### BEGIN INIT INFO
# Provides: deluge-webd
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network

# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Daemonized version of deluge-web.
# Description:       Starts the deluge-web daemon.

### END INIT INFO

DELUGED_WEB_BIN=/usr/bin/deluge-web
test -x $DELUGED_WEB_BIN || exit 5

DELUGED_WEB_USER="deluge"

. /etc/rc.status

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status

# First reset status of this service
rc_reset

case "$1" in
    start)
        
        echo -n "Starting DELUGE-WEB daemon"
        ## Start daemon with startproc(8). If this fails
        ## the echo return value is set appropriate.

        startproc -f -u $DELUGED_WEB_USER $DELUGED_WEB_BIN

        # Remember status and be verbose
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down DELUGE-WEB daemon"
        ## Stop daemon with killproc(8) and if this fails
        ## set echo the echo return value.

        killproc -TERM $DELUGED_WEB_BIN

        # Remember status and be verbose
        rc_status -v
        ;;
    try-restart)
        ## Stop the service and if this succeeds (i.e. the 
        ## service was running before), start it again.
        $0 status >/dev/null &&  $0 restart

        # Remember status and be quiet
        rc_status
        ;;
    restart)
        ## Stop the service and regardless of whether it was
        ## running or not, start it again.
        $0 stop
        $0 start

        # Remember status and be quiet
        rc_status
        ;;
    force-reload|reload)
        ## Signal the daemon to reload its config. Most daemons
        ## do this on signal 1 (SIGHUP).

        echo -n "Reload service DELUGED_WEB"

        killproc -HUP $DELUGED_WEB_BIN

        rc_status -v

        ;;
    status)
        echo -n "Checking for service DELUGED_WEB "
        ## Check status with checkproc(8), if process is running
        ## checkproc will return with exit status 0.

        # Status has a slightly different for the status command:
        # 0 - service running
        # 1 - service dead, but /var/run/  pid  file exists
        # 2 - service dead, but /var/lock/ lock file exists
        # 3 - service not running

        checkproc $DELUGED_WEB_BIN

        rc_status -v
        ;;
    probe)
        ## Optional: Probe for the necessity of a reload,
        ## give out the argument which is required for a reload.

        ;;
    *)
        echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
        exit 1
        ;;
esac
rc_exit

FreeBSD Init Script

Deluged

#!/bin/sh
#
#  deluged RCng startup script
#  created by: R.S.A. aka .faust 
#            mail: rsa dot aka dot f at gmail dot com
# 
 
# PROVIDE: deluged
# REQUIRE: NETWORKING SERVERS DAEMON ldconfig resolv
# BEFORE: LOGIN
# KEYWORD: shutdown
 
# Add the following line to /etc/rc.conf.local or /etc/rc.conf to enable deluged at startup
#       deluged_enable="YES"
#
# pidfile  (str):            Specify the full path to the PID file
# log (str):                    Specify the full path to the LOG file
# delugew_user (str):  Set to user running deluge-web
# cfg_dir (str):            Specify the full path to directory with deluge config files
#
#  Warning! Rights to folders and files must be "rwx" for the user under which the run deluge 
 
. /etc/rc.subr
 
name="deluged"
rcvar=`set_rcvar`
 
load_rc_config $name
deluged_enable=${deluged_enable:=NO}

log="/home/deluge/${name}.log"
pidfile="/home/deluge/${name}.pid"
cfg_dir="/home/deluge/config/"
deluged_user="nobody"

required_dirs=${cfg_dir}

command_interpreter="/usr/local/bin/python"
command="/usr/local/bin/${name}"
start_cmd="${name}_start"

deluged_start()
{
if [ ! -f "${pidfile}" ]; then
    su -m ${deluged_user} -c "/usr/local/bin/${name} -c ${cfg_dir} -l ${log} -P ${pidfile}"
    echo "Starting ${name}."
else
    GETPROCESSPID=`/bin/ps -auxw | /usr/bin/awk '/deluged/ && !/awk/ && !/sh/ {print $2}'`
    PIDFROMFILE=`cat ${pidfile}`
    if [ "$GETPROCESSPID" = "$PIDFROMFILE" ]; then
        echo "${name} already running with PID: ${PIDFROMFILE} ?"  
        echo "Remove ${pidfile} manually if needed."
    else
        rm -f ${pidfile}
        su -m ${deluged_user} -c "/usr/local/bin/${name} -c ${cfg_dir} -l ${log} -P ${pidfile}"
        echo "Starting ${name}."
    fi
fi
}
 
 
run_rc_command "$1"

Web UI

#!/bin/sh
#
#  deluge-web RCng startup script
#  created by: R.S.A. aka .faust 
#            mail: rsa dot aka dot f at gmail dot com
# 
 
# PROVIDE: delugew
# REQUIRE: NETWORKING SERVERS DAEMON ldconfig resolv
# BEFORE: LOGIN
# KEYWORD: shutdown
 
# Add the following line to /etc/rc.conf.local or /etc/rc.conf to enable deluge-web at startup
#       delugew_enable="YES"
#
# pidfile  (str):            Specify the full path to the PID file
# log (str):                    Specify the full path to the LOG file
# delugew_user (str):  Set to user running deluge-web
# cfg_dir (str):            Specify the full path to directory with deluge config files
#
#  Warning! Rights to folders and files must be "rwx" for the user under which the run deluge 
. /etc/rc.subr
 
name="delugew"
rcvar=`set_rcvar`
 
load_rc_config $name
delugew_enable=${delugew_enable:=NO}

log="/home/deluge/${name}.log"
pidfile="/home/deluge/${name}.pid"
cfg_dir="/home/deluge/config/"
delugew_user="nobody"

required_dirs=${cfg_dir}

command_interpreter="/usr/local/bin/python"
command="/usr/local/bin/deluge-web"
start_cmd="${name}_start"
start_postcmd="${name}_poststart"

delugew_start()
{
if [ ! -f "${pidfile}" ]; then
    su -m ${delugew_user} -c "/usr/local/bin/deluge-web -f -c ${cfg_dir} -l ${log}"
    echo "Starting ${name}."
else
    GETPROCESSPID=`/bin/ps -auxw | /usr/bin/awk '/deluge-web/ && !/awk/ && !/sh/ {print $2}'`
    PIDFROMFILE=`cat ${pidfile}`
    if [ "$GETPROCESSPID" = "$PIDFROMFILE" ]; then
        echo "${name} already running with PID: ${PIDFROMFILE} ?"  
        echo "Remove ${pidfile} manually if needed."
    else
        rm -f ${pidfile}
        su -m ${delugew_user} -c "/usr/local/bin/deluge-web -f -c ${cfg_dir} -l ${log}"
        echo "Starting ${name}."
    fi
fi
}
 
delugew_poststart()
{
echo `/bin/ps -auxw | /usr/bin/awk '/deluge-web/ && !/awk/ {print $2}'` > $pidfile
}
 
run_rc_command "$1"