1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun# Original Author: Lennart A. Jtte, based on Rob Howell's script 4*4882a593Smuzhiyun# Modified by Maarten Van Coile & others (on IRC) 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun# Changes for buildroot: 7*4882a593Smuzhiyun# USERNAME points to 'default' in standard installation 8*4882a593Smuzhiyun# TODO: set logfile with --logfile option 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun# Do NOT "set -e" 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun# 13*4882a593Smuzhiyun# ----- CONFIGURATION ----- 14*4882a593Smuzhiyun# 15*4882a593Smuzhiyun# For the default location Transmission uses, visit: 16*4882a593Smuzhiyun# http://trac.transmissionbt.com/wiki/ConfigFiles 17*4882a593Smuzhiyun# For a guide on how set the preferences, visit: 18*4882a593Smuzhiyun# http://trac.transmissionbt.com/wiki/EditConfigFiles 19*4882a593Smuzhiyun# For the available environement variables, visit: 20*4882a593Smuzhiyun# http://trac.transmissionbt.com/wiki/EnvironmentVariables 21*4882a593Smuzhiyun# 22*4882a593Smuzhiyun# The name of the user that should run Transmission. 23*4882a593Smuzhiyun# It's RECOMENDED to run Transmission in it's own user, 24*4882a593Smuzhiyun# by default, this is set to 'transmission'. 25*4882a593Smuzhiyun# For the sake of security you shouldn't set a password 26*4882a593Smuzhiyun# on this user 27*4882a593SmuzhiyunUSERNAME=transmission 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun# ----- *ADVANCED* CONFIGURATION ----- 31*4882a593Smuzhiyun# Only change these options if you know what you are doing! 32*4882a593Smuzhiyun# 33*4882a593Smuzhiyun# The folder where Transmission stores the config & web files. 34*4882a593Smuzhiyun# ONLY change this you have it at a non-default location 35*4882a593Smuzhiyun#TRANSMISSION_HOME="/var/config/transmission-daemon" 36*4882a593Smuzhiyun#TRANSMISSION_WEB_HOME="/usr/share/transmission/web" 37*4882a593Smuzhiyun# 38*4882a593Smuzhiyun# The arguments passed on to transmission-daemon. 39*4882a593Smuzhiyun# ONLY change this you need to, otherwise use the 40*4882a593Smuzhiyun# settings file as per above. 41*4882a593Smuzhiyun#TRANSMISSION_ARGS="" 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun# ----- END OF CONFIGURATION ----- 45*4882a593Smuzhiyun# 46*4882a593Smuzhiyun# PATH should only include /usr/* if it runs after the mountnfs.sh script. 47*4882a593SmuzhiyunPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 48*4882a593SmuzhiyunDESC="bittorrent client" 49*4882a593SmuzhiyunNAME=transmission-daemon 50*4882a593SmuzhiyunDAEMON=$(which $NAME) 51*4882a593SmuzhiyunPIDFILE=/var/run/$NAME.pid 52*4882a593SmuzhiyunSCRIPTNAME=/etc/init.d/$NAME 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun# Read configuration variable file if it is present 55*4882a593Smuzhiyun[ -r /etc/default/$NAME ] && . /etc/default/$NAME 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun# Load the VERBOSE setting and other rcS variables 58*4882a593Smuzhiyun[ -f /etc/default/rcS ] && . /etc/default/rcS 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun# 61*4882a593Smuzhiyun# Function that starts the daemon/service 62*4882a593Smuzhiyun# 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunstart() 65*4882a593Smuzhiyun{ 66*4882a593Smuzhiyun # Export the configuration/web directory, if set 67*4882a593Smuzhiyun if [ -n "$TRANSMISSION_HOME" ]; then 68*4882a593Smuzhiyun export TRANSMISSION_HOME 69*4882a593Smuzhiyun fi 70*4882a593Smuzhiyun if [ -n "$TRANSMISSION_WEB_HOME" ]; then 71*4882a593Smuzhiyun export TRANSMISSION_WEB_HOME 72*4882a593Smuzhiyun fi 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun # Return 75*4882a593Smuzhiyun # 0 if daemon has been started 76*4882a593Smuzhiyun # 1 if daemon was already running 77*4882a593Smuzhiyun # 2 if daemon could not be started 78*4882a593Smuzhiyun start-stop-daemon --chuid $USERNAME --start --pidfile $PIDFILE --make-pidfile \ 79*4882a593Smuzhiyun --exec $DAEMON --background --test -- -f $TRANSMISSION_ARGS > /dev/null \ 80*4882a593Smuzhiyun || return 1 81*4882a593Smuzhiyun start-stop-daemon --chuid $USERNAME --start --pidfile $PIDFILE --make-pidfile \ 82*4882a593Smuzhiyun --exec $DAEMON --background -- -f $TRANSMISSION_ARGS \ 83*4882a593Smuzhiyun || return 2 84*4882a593Smuzhiyun} 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun# 87*4882a593Smuzhiyun# Function that stops the daemon/service 88*4882a593Smuzhiyun# 89*4882a593Smuzhiyunstop() 90*4882a593Smuzhiyun{ 91*4882a593Smuzhiyun # Return 92*4882a593Smuzhiyun # 0 if daemon has been stopped 93*4882a593Smuzhiyun # 1 if daemon was already stopped 94*4882a593Smuzhiyun # 2 if daemon could not be stopped 95*4882a593Smuzhiyun # other if a failure occurred 96*4882a593Smuzhiyun start-stop-daemon --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --exec $DAEMON 97*4882a593Smuzhiyun RETVAL="$?" 98*4882a593Smuzhiyun [ "$RETVAL" = 2 ] && return 2 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun # Wait for children to finish too if this is a daemon that forks 101*4882a593Smuzhiyun # and if the daemon is only ever run from this initscript. 102*4882a593Smuzhiyun # If the above conditions are not satisfied then add some other code 103*4882a593Smuzhiyun # that waits for the process to drop all resources that could be 104*4882a593Smuzhiyun # needed by services started subsequently. A last resort is to 105*4882a593Smuzhiyun # sleep for some time. 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON 108*4882a593Smuzhiyun [ "$?" = 2 ] && return 2 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun # Many daemons don't delete their pidfiles when they exit. 111*4882a593Smuzhiyun rm -f $PIDFILE 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun return "$RETVAL" 114*4882a593Smuzhiyun} 115*4882a593Smuzhiyun 116*4882a593Smuzhiyuncase "$1" in 117*4882a593Smuzhiyun start) 118*4882a593Smuzhiyun echo "Starting $DESC" "$NAME..." 119*4882a593Smuzhiyun start 120*4882a593Smuzhiyun case "$?" in 121*4882a593Smuzhiyun 0|1) echo " Starting $DESC $NAME succeeded" ;; 122*4882a593Smuzhiyun *) echo " Starting $DESC $NAME failed" ;; 123*4882a593Smuzhiyun esac 124*4882a593Smuzhiyun ;; 125*4882a593Smuzhiyun stop) 126*4882a593Smuzhiyun echo "Stopping $DESC $NAME..." 127*4882a593Smuzhiyun stop 128*4882a593Smuzhiyun case "$?" in 129*4882a593Smuzhiyun 0|1) echo " Stopping $DESC $NAME succeeded" ;; 130*4882a593Smuzhiyun *) echo " Stopping $DESC $NAME failed" ;; 131*4882a593Smuzhiyun esac 132*4882a593Smuzhiyun ;; 133*4882a593Smuzhiyun restart|force-reload) 134*4882a593Smuzhiyun # 135*4882a593Smuzhiyun # If the "reload" option is implemented then remove the 136*4882a593Smuzhiyun # 'force-reload' alias 137*4882a593Smuzhiyun # 138*4882a593Smuzhiyun echo "Restarting $DESC $NAME..." 139*4882a593Smuzhiyun stop 140*4882a593Smuzhiyun case "$?" in 141*4882a593Smuzhiyun 0|1) 142*4882a593Smuzhiyun start 143*4882a593Smuzhiyun case "$?" in 144*4882a593Smuzhiyun 0|1) echo " Restarting $DESC $NAME succeeded" ;; 145*4882a593Smuzhiyun *) echo " Restarting $DESC $NAME failed: couldn't start $NAME" ;; 146*4882a593Smuzhiyun esac 147*4882a593Smuzhiyun ;; 148*4882a593Smuzhiyun *) 149*4882a593Smuzhiyun echo " Restarting $DESC $NAME failed: couldn't stop $NAME" ;; 150*4882a593Smuzhiyun esac 151*4882a593Smuzhiyun ;; 152*4882a593Smuzhiyun *) 153*4882a593Smuzhiyun echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 154*4882a593Smuzhiyun exit 3 155*4882a593Smuzhiyun ;; 156*4882a593Smuzhiyunesac 157