Friday, September 16, 2011

utorrent server linux startup script

Here's a linux utorrent script so you can start utorrent server like a service on linux machines!

Currently tested working on ubuntu and debian systems but should work on most linux boxes.

#!/bin/sh
#
#
# Original source: http://forum.utorrent.com/viewtopic.php?id=88044
#
# uTorrent start stop service script
#
# copy to /etc/init.d
# run "update-rc.d utorrent defaults" to install
# run "update-rc.d utorrent remove" to remove
#
#
# version 2 improvments by:
# @author FanFan Huang (kaboom05+utorrentscript@gmail.com)
#
#
UTORRENT_PATH=/home/vortex-5/shared/utorrent/utorrent-server-v3_0 #where you extracted your utserver executable
LOGFILE=/home/vortex-5/log/utorrent.log #must be a writable directory
USER=vortex-5 #any user account you can create the utorrent user if you like
GROUP=users
NICE=15
SCRIPTNAME=/etc/init.d/utorrent #must match this file name
DESC="uTorrent Server for Linux"
CHDIR=$UTORRENT_PATH
NAME=utserver
UT_SETTINGS=$UTORRENT_PATH
UT_LOG=$LOGFILE
DAEMON_ARGS="-settingspath ${UT_SETTINGS} -logfile ${UT_LOG}"
DAEMON=$CHDIR/$NAME
PIDFILE=/var/run/utorrent.pid
STOP_TIMEOUT=5
INIT_VERBOSE=yes
FAILURE=false
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
FAILURE=false
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
# 3 if port bind failed
start-stop-daemon --start --nicelevel $NICE --quiet --make-pidfile --pidfile $PIDFILE --chuid $USER:$GROUP --chdir $CHDIR --background --exec $DAEMON --test > /dev/null
if [ "$?" = "1" ]; then
return 1
fi
start-stop-daemon --start --nicelevel $NICE --quiet --make-pidfile --pidfile $PIDFILE --chuid $USER:$GROUP --chdir $CHDIR --background --exec $DAEMON -- $DAEMON_ARGS
if [ "$?" != "0" ]; then
return 2
fi
#bind validation
while [ ! -e $LOGFILE ]; do
sleep 1 #Wait for file to be generated
done
######################## DISABLED ENABLE THIS SECTION IF YOU HAVE IPv6 HANGS WITH NO IPv6 Support ################
# while [ ! -n "$(cat $LOGFILE|grep 'IPv6 is installed')" ]; do
# #wait until utorrent has finished bootup (IPv6 MESSAGE is the last message)#
# sleep 1
# done
RESULT=$(cat $LOGFILE|grep 'bind failed')
if [ -n "$RESULT" ]; then
return 3
fi
return 0
}
#
# 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 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
if [ "$RETVAL" = 2 ]; then
return 2
fi
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
RETVAL="$?"
if [ "$RETVAL" = 2 ]; then
return 2
fi
#block process until server is completed shutting down fully
while [ -n "$(pidof "$NAME")" ]; do
sleep 1
done
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
rm -f $LOGFILE #we don't want to keep our logfile
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
msg_start() {
case "$1" in
0|1)
if [ "$VERBOSE" != no ]; then
log_end_msg 0
fi
;;
2)
if [ "$VERBOSE" != no ]; then
log_end_msg 1
fi
;;
3)
if [ "$VERBOSE" != no ]; then
log_daemon_msg "Port bind failure detected uTorrent may have limited functionality please change the bind port and restart uTorrent"
log_end_msg 1
fi
;;
esac
}
msg_stop() {
case "$1" in
0|1)
if [ "$VERBOSE" != no ]; then
log_end_msg 0
fi
;;
*)
if [ "$VERBOSE" != no ]; then
log_daemon_msg "Failed to stop service exit status $STATUS"
log_end_msg 1
fi
esac
}
case "$1" in
start)
if [ "$VERBOSE" != no ]; then
log_daemon_msg "Starting $DESC"
fi
do_start
msg_start "$?"
;;
stop)
if [ "$VERBOSE" != no ]; then
log_daemon_msg "Stopping $DESC"
fi
do_stop
msg_stop "$?"
;;
status)
if [ -e "$PIDFILE" ]; then
PID=" PID:($(cat $PIDFILE))"
else
PID=""
fi
status_of_proc "$DAEMON" "uTorrent$PID"
if [ "$?" != "0" ]; then
exit $?
fi
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC"
do_stop
STATUS="$?"
if [ "$STATUS" -ne 0 ] && [ "$STATUS" -ne 1 ]; then
log_daemon_msg "Could not stop exit status $STATUS"
log_end_msg 1
exit 1
fi
do_start
STATUS="$?"
case "$STATUS" in
0)
log_end_msg 0
;;
*)
log_daemon_msg "Restart failed start exist status $STATUS"
log_end_msg 1
esac
;;
log)
if [ -e "$LOGFILE" ]; then
LOG=$(cat $LOGFILE)
echo "$LOG"
else
echo "uTorrent is not running no active log file"
fi
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload|log}" >&2
exit 3
;;
esac
view raw utorrent hosted with ❤ by GitHub

11 comments:

Leandro said...

Great script. I've installed on ubuntu oneiric. Let's see how it goes.

Thanks

vortex-5 said...

Hi since you've looking at this one if you're on ubuntu I wrote a better one to use Upstart.

http://vortex-5.blogspot.com/2011/10/utorrent-upstart-script.html

I believe these ones are installed to /etc/init/

The script is a conf script.

Upstart handles the state of the program and is more fault tolerant. Upstart is Ubuntu's new way of doing things and as you can tell it's simpler

vortex-5 said...

Upstart scripts are run via:

service servicename (start|stop|restart)

Leandro said...

Ok. Thanks. Should I just copy it to there, or there a commanda to 'install' the service (like update-rc.d) ?

vortex-5 said...

I don't think it's required for upstart.

just copy it and check to see if it starts. (make sure to set the path before you do)

Anonymous said...

"service utorrent does not support chkconfig" on Fedora 14. Any ideas?

vortex-5 said...

Is this happening when you try and install the RC.d script or when you try and run the command?

TechLife said...

When I try to install the script:

# chkconfig --add utorrent
service utorrent does not support chkconfig

TechLife said...

I figured it out. I added the following to the beginning of the script and was good:

#!/bin/sh
#
### BEGIN INIT INFO
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO


I know there are several other ways to do this, but I chose this one. ;)

vortex-5 said...

interresting Fedora must require the INIT section where debian is optional.

For Ubuntu users the upstart version of this script makes much more sense and is simpler.

Virtual Edge said...

I must say, that Torrent is one of the most famous and used places on the web. The way they provide Free Data, and the popularity and Respect they have earned in these years, is really unbelievable. Officially they are illegal. but they are kind of Robin Hood type. Who takes paid things from the providers and make them available to the public for Free.
Virtual Edge

Hobbies

I need new hobbies. Two years into COVID-19 my hobby became everything COVID related everything from keeping up with the latest restriction...