Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- #############
- ###<Notes>###
- #############
- # This script depends on screen.
- # For the stop function to work, you must set an
- # explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.
- # If you typically just start rtorrent with just "rtorrent" on the
- # command line, all you need to change is the "user" option.
- # Attach to the screen session as your user with
- # "screen -dr rtorrent". Change "rtorrent" with srnname option.
- # Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
- ##############
- ###</Notes>###
- ##############
- #######################
- ##Start Configuration##
- #######################
- # You can specify your configuration in a different file
- # (so that it is saved with upgrades, saved in your home directory,
- # or whateve reason you want to)
- # by commenting out/deleting the configuration lines and placing them
- # in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
- # have written them here (you can leave the comments if you desire
- # and then uncommenting the following line correcting the path/filename
- # for the one you used. note the space after the ".".
- # . /etc/rtorrent.init.conf
- #Do not put a space on either side of the equal signs e.g.
- # user = user
- # will not work
- # system user to run as
- user="<username>"
- # the system group to run as, not implemented, see d_start for beginning implementation
- # group=`id -ng "$user"`
- # the full path to the filename where you store your rtorrent configuration
- config="`su -c 'echo $HOME' $user`/.rtorrent.rc"
- # set of options to run with
- options=""
- # default directory for screen, needs to be an absolute path
- base="`su -c 'echo $HOME' $user`"
- # name of screen session
- srnname="rtorrent"
- # file to log to (makes for easier debugging if something goes wrong)
- logfile="/var/log/rtorrentInit.log"
- #######################
- ###END CONFIGURATION###
- #######################
- PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
- DESC="rtorrent"
- NAME=rtorrent
- DAEMON=$NAME
- SCRIPTNAME=/etc/init.d/$NAME
- checkcnfg() {
- exists=0
- for i in `echo "$PATH" | tr ':' '\n'` ; do
- if [ -f $i/$NAME ] ; then
- exists=1
- break
- fi
- done
- if [ $exists -eq 0 ] ; then
- echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
- exit 3
- fi
- if ! [ -r "${config}" ] ; then
- echo "cannot find readable config ${config}. check that it is there and permissions are appropriate" | tee -a "$logfile" >&2
- exit 3
- fi
- session=`getsession "$config"`
- if ! [ -d "${session}" ] ; then
- echo "cannot find readable session directory ${session} from config ${config}. check permissions" | tee -a "$logfile" >&2
- exit 3
- fi
- }
- d_start() {
- [ -d "${base}" ] && cd "${base}"
- stty stop undef && stty start undef
- su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
- # this works for the screen command, but starting rtorrent below adopts screen session gid
- # even if it is not the screen session we started (e.g. running under an undesirable gid
- #su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2
- su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
- }
- d_stop() {
- session=`getsession "$config"`
- if ! [ -s ${session}/rtorrent.lock ] ; then
- return
- fi
- pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
- if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
- kill -s INT ${pid}
- fi
- }
- getsession() {
- session=`cat "$1" | grep "^[[:space:]]*session[[:space:]]*=" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//" `
- echo $session
- }
- checkcnfg
- case "$1" in
- start)
- echo -n "Starting $DESC: $NAME"
- d_start
- echo "."
- ;;
- stop)
- echo -n "Stopping $DESC: $NAME"
- d_stop
- echo "."
- ;;
- restart|force-reload)
- echo -n "Restarting $DESC: $NAME"
- d_stop
- sleep 1
- d_start
- echo "."
- ;;
- *)
- echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
- esac
- exit 0
Add Comment
Please, Sign In to add comment