Advertisement
Guest User

rtorrent start/stop/restart script

a guest
Jul 24th, 2014
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.51 KB | None | 0 0
  1. #!/bin/bash
  2. # rTorrent Stop/Start/Restart
  3. PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin:/sbin
  4. FILE="$HOME/rtorrent/.session/rtorrent.lock"
  5. SERVICE='rtorrent'
  6. RTPID=$(pidof $SERVICE)
  7. # Sets default status can be askkill, autokill, or donotkill
  8. KILLSTATUS='askkill'
  9. KILLSIGNAL='-15'
  10. RTLOG="/dev/null"
  11. loglines=500
  12. useerr=0
  13. LOGFLAG=0
  14.  
  15. # write log file
  16. log_header() {
  17. RTLOG="$HOME/rt.log"
  18. echo >> $RTLOG
  19. date >> $RTLOG
  20. echo "$0 $@" >> $RTLOG
  21. if [ $(cat "$RTLOG" | wc -l) -gt $loglines ]
  22.   then
  23.     tail -$loglines  "$RTLOG" > $HOME/rt.temp
  24.     cat $HOME/rt.temp > $RTLOG
  25.     rm -f $HOME/rt.temp
  26. fi
  27. }
  28.  
  29. # function to check if service is running
  30. service_running(){
  31. if pidof $SERVICE > /dev/null
  32.   then
  33.     return 0
  34.   else
  35.     return 1
  36. fi
  37. }
  38.  
  39. # function to ask user for y/n response
  40. ask_user(){
  41. if [ -t 1 ]
  42.   then
  43.     while true
  44.       do
  45.       read -p "Unable to close $SERVICE, close using kill -9? " answer
  46.       case $answer in [Yy]* ) return 0 ;;
  47.                       [Nn]* ) return 1 ;;
  48.                           * ) echo "Enter y or n";;
  49.       esac
  50.     done
  51.   else
  52.     echo "Running in background -a auto response is n" >> $RTLOG
  53.     return 1
  54. fi
  55. }
  56.  
  57. # function that starts service
  58. start_service(){
  59.   local seconds=0
  60.   if [ $SERVICE = "rtorrent" ]
  61.     then
  62.       if [ -a $FILE ]
  63.         then
  64.           echo "removing $FILE" | tee -a "$RTLOG"
  65.           rm -f $FILE
  66.         else
  67.           echo "No session lock file" | tee -a "$RTLOG"
  68.       fi
  69.   fi
  70.  
  71.   echo -n "Starting $SERVICE"
  72.   screen -d -m -S $SERVICE $SERVICE
  73.  
  74.   while ! (service_running)
  75.     do
  76.       seconds=$(( $seconds + 1 ))
  77.       echo -n "."
  78.       sleep 1
  79.       if [ $seconds = 10 ]
  80.         then
  81.           echo
  82.           return 1
  83.       fi
  84.   done
  85.  
  86.   echo
  87.   return 0
  88. }
  89.  
  90. # function that stops service
  91. stop_service(){
  92.  local seconds=0
  93.  echo -n "$SERVICE shutting down using kill $1"
  94.  kill $1 $RTPID
  95.  
  96.  while ( service_running )
  97.    do
  98.      seconds=$(( $seconds + 1 ))
  99.      echo -n " ."
  100.      sleep 1
  101.      if [ $seconds = 20 ]
  102.        then
  103.          echo
  104.          return 1          
  105.      fi
  106.    done
  107.  
  108.    echo
  109.    return 0      
  110. }
  111.  
  112. # reports any usage error
  113. usage_error() {
  114. echo "usage: [-h] [-a|-k|-d] [-l] [start | stop | restart]" | tee -a "$RTLOG"
  115. if [ $1 = 1 ]
  116.   then
  117.     echo "only one of the options -a -k -d allowed" | tee -a "$RTLOG"
  118. fi
  119.  
  120. if [ $1 = 2 ]
  121.   then
  122.     echo "incorrect option used" | tee -a "$RTLOG"
  123. fi
  124.  
  125. if [ $1 = 3 ]
  126.   then
  127.     echo "incorrect argument used" | tee -a "$RTLOG"
  128. fi
  129.  
  130. if [ $1 = 4 ]
  131.   then
  132.     echo "too many arguments, only 1 argument allowed" | tee -a "$RTLOG"
  133. fi
  134.  
  135.  
  136. exit 1
  137. }
  138.  
  139. # prints usage help to screen
  140. usage_help() {
  141. echo "usage: [-h] [-a|-k|-d] [-l] [start | stop | restart]"
  142. echo "options:"
  143. echo "  -h usage help display"
  144. echo "  -l send results to log file"
  145. echo "  -a if unable to close service ask user whether to use kill -9"
  146. echo "  -k if unable to close service use kill -9"
  147. echo "  -d if unable to close service do not use kill -9"
  148. echo "arguments:"
  149. echo "  start starts the service"
  150. echo "  stop stops the service"
  151. echo "  restart first stops and then starts the service"
  152.  
  153. exit 0
  154. }
  155.  
  156.  
  157. # Check for options
  158. while getopts ":hlkad" optname
  159.   do
  160.     case $optname in
  161.       "k" )[[ -n $OPTFLAG ]]  && useerr=1 || KILLSTATUS='autokill' && OPTFLAG=1 ;;
  162.       "a" )[[ -n $OPTFLAG ]]  && useerr=1 || KILLSTATUS='askkill' && OPTFLAG=1 ;;
  163.       "d" )[[ -n $OPTFLAG ]]  && useerr=1 || KILLSTATUS='donotkill' && OPTFLAG=1 ;;
  164.       "l" ) LOGFLAG=1 ;;
  165.       "h" ) usage_help ;;
  166.         * ) useerr=2 ;;
  167.     esac
  168.   done
  169.  
  170. if [ $LOGFLAG = 1 ]
  171.   then
  172.     log_header "$@"
  173. fi
  174.  
  175. if [ $useerr -gt 0 ]
  176.   then
  177.     usage_error $useerr
  178. fi
  179.  
  180. shift $(( $OPTIND - 1 ))
  181.  
  182. # Check correct arguments used
  183. if [ $# = 1 ]
  184.   then
  185.     if ! [[ $1 = "stop" || $1 = "start" || $1 = "restart"  ]]
  186.       then
  187.         useerr=3
  188.         usage_error $useerr
  189.     fi
  190. fi
  191.  
  192. # Check if there is more than 1 argument
  193. if [ $# -gt 1 ]
  194.   then
  195.     useerr=4
  196.     usage_error $useerr
  197. fi
  198.  
  199. # Check if service is running
  200. if [ $# = 0 ]
  201.   then
  202.     if ( service_running )
  203.       then
  204.         echo "$SERVICE is running"
  205.       else
  206.         echo "$SERVICE is NOT running"
  207.     fi
  208. fi
  209.  
  210. # Stop Service
  211. if [[ $1 = "stop" || $1 = "restart" ]]
  212.   then
  213.     if ! ( service_running )
  214.       then
  215.         echo "$SERVICE was not running"
  216.       else
  217.         if ! ( stop_service $KILLSIGNAL )
  218.           then
  219.             case $KILLSTATUS in
  220.               "autokill" )
  221.                 KILLSIGNAL='-9'
  222.                 stop_service $KILLSIGNAL ;;
  223.               "askkill" )
  224.                 if ( ask_user )
  225.                   then
  226.                     KILLSIGNAL='-9'
  227.                     stop_service $KILLSIGNAL
  228.                 fi ;;
  229.             esac
  230.         fi
  231.  
  232.         if ( service_running )
  233.           then
  234.             echo "WARNING unable to close $SERVICE using $KILLSIGNAL" | tee -a "$RTLOG"
  235.             exit 1
  236.           else
  237.             echo "$SERVICE has been closed using kill $KILLSIGNAL" | tee -a "$RTLOG"
  238.         fi
  239.     fi    
  240. fi
  241.  
  242. # Start Service
  243. if [[ $1 = "start" || $1 = "restart" ]]
  244.   then
  245.     if ( service_running )
  246.       then
  247.         echo "$SERVICE was already running"
  248.       else
  249.         if ( start_service )
  250.           then
  251.             echo "$SERVICE has been started" | tee -a "$RTLOG"
  252.           else
  253.             echo "WARNING: Unable to start $SERVICE" | tee -a "$RTLOG"
  254.         fi
  255.     fi
  256. fi
  257.  
  258. echo "There were no problems encountered" >> "$RTLOG"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement