cyla

cyla

Aug 21st, 2009
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.01 KB | None | 0 0
  1. #!/sbin/runscript.sh
  2.  
  3. rtuser="$(echo ${BASH_SOURCE##*rtorrent_})"
  4. rtuserid="$(getent passwd $rtuser | awk -F: '{ print $3 }')"
  5. rthome="$(getent passwd $rtuser | awk -F: '{ print $6 }')"
  6. rtconfig="${rthome}/.rtorrent.rc"
  7. rtgconfig="/etc/rtorrent/rtorrent.rc"
  8. rtoptions="-n -o import=${rtconfig} -o import=${rtgconfig}"
  9. rtname="rTorrent for ${rtuser}"
  10. rtscreenpath="$(which screen)"
  11. rtscreenname="torrent"
  12. rtpath="$(which rtorrent)"
  13. rtpidfile="/var/run/rtorrent_${rtuser}"
  14.  
  15. getsession() {
  16.     session="$(cat $1 | grep "^[[:space:]]*session[[:space:]]*=" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//")"
  17.     session="$(echo ${session} | sed 's|~|'$2'|g')"
  18.     echo $session
  19. }
  20.  
  21. getsocket() {
  22.     socket="$(cat $1 | grep "^[[:space:]]*scgi_local[[:space:]]*=" | sed "s/^[[:space:]]*scgi_local[[:space:]]*=[[:space:]]*//")"
  23.     socket="$(echo ${socket} | sed 's|~|'$2'|g')"
  24.     if [ -z ${socket} ] ; then
  25.         echo false
  26.     else
  27.         echo $socket
  28.     fi
  29. }
  30.  
  31. checkuser() {
  32.     if [ -z "$(getent passwd ${rtuser})" ] ; then
  33.         eerror "User ${rtuser} does not exits."
  34.         return 1
  35.     fi
  36. }
  37.  
  38. checkhome() {
  39.     if ! [ -d $rthome ] ; then
  40.         eerror "Home directory ${rthome} does not exist."
  41.         return 1
  42.     fi
  43. }
  44.  
  45. checkconfig() {
  46.     if ! [ -r "${rtconfig}" ] ; then
  47.         eerror "Cannot find readable config ${rtconfig}."
  48.         return 1
  49.     fi
  50.     if ! [ -r "${rtgconfig}" ] ; then
  51.         eerror "Cannot find readable config ${rtgconfig}."
  52.         return 1
  53.     fi
  54.     rtsession="$(getsession $rtgconfig $rthome)"
  55.     if ! [ -d "${rtsession}" ] ; then
  56.         eerror "Cannot find readable session directory ${rtsession} from configs ${rtgconfig}, ${rtconfig}."
  57.         return 1
  58.     fi
  59. }
  60.  
  61. checkrunning() {
  62.     session="$(getsession $rtgconfig $rthome)"
  63.     echo $session
  64.     if [ -s "${session}/rtorrent.lock" ] ; then
  65.         pid="$(cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g")"
  66.         echo $pid
  67.         if ps -A | grep -sq "${pid}.*rtorrent" ; then
  68.             eerror "${rtname} is already running"
  69.             return 1
  70.         else
  71.             ewarn "Lock file has been found, but ${rtname} is not running...deleting lock file"
  72.             rm -f ${session}/rtorrent.lock
  73.         fi
  74.     fi
  75. }
  76.  
  77. checksocket() {
  78.     socket="$(getsocket $rtgconfig $rthome)"
  79.     if [ -S ${socket} ]; then
  80.         ewarn "SCGI socket (${socket}) has been found, but rTorrent's not running...deleting socket file"
  81.         rm -f ${socket}
  82.     fi
  83. }
  84.  
  85. preparescreen() {
  86.     su -c "screen -ls | grep -sq '\.${rtscreenname}[[:space:]]' || screen -dmS ${rtscreenname} 2>&1 1>/dev/null" $rtuser
  87. }
  88.  
  89. depend() {
  90.     use net ypbind nis
  91.     after slapd mysqld postgresql
  92. }
  93.  
  94. start(){
  95.         checkuser || return 1
  96.     checkhome || return 1
  97.         checkconfig || return 1
  98.     checkrunning || return 1
  99.  
  100.     ebegin "Starting ${rtname}"
  101.  
  102.     checksocket
  103.     preparescreen
  104.  
  105.     start-stop-daemon --start --verbose --chuid "${rtuser}" --chdir "${rthome}" --name rtorrent --env TERM="xterm" --exec /usr/bin/screen -- -S torrent -X screen /usr/bin/rtorrent
  106.  
  107.     eend $?
  108. }
  109.  
  110. stop() {
  111.     ebegin "Stopping ${rtname}"
  112.  
  113.     start-stop-daemon --stop --verbose --user "${rtuser}" --name rtorrent --signal 2
  114.  
  115.     eend $?
  116. }
  117.  
Add Comment
Please, Sign In to add comment