Új hozzászólás Aktív témák

  • Intruder2k5

    MODERÁTOR

    válasz Intruder2k5 #5143 üzenetére

    S99rtorrent

    #!/bin/sh

    CONFIG="/opt/etc/rtorrent.conf"
    OPTIONS="-n -o import=${CONFIG}"
    BASE="/opt/etc/samba/Share/torrent"
    SRNAME=rtorrent
    PATH=/opt/bin:/opt/sbin:/usr/bin:/sbin:/bin:/usr/sbin
    NAME=rtorrent
    EXEC=/opt/bin/$NAME
    EXSC=/opt/bin/screen

    checkcnfg() {
    if ! [ -x $EXSC ]; then
    logger -t $NAME "screen not found."
    return 3
    fi
    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
    logger -t $NAME "cannot find $NAME binary in PATH $PATH"
    exit 3
    fi
    if ! [ -r "${CONFIG}" ] ; then
    logger -t $NAME "cannot find readable config $CONFIG"
    exit 3
    fi
    session=`getsession "$CONFIG"`
    if ! [ -d "${session}" ] ; then
    logger -t $NAME "cannot find readable session directory $session from config $CONFIG"
    exit 3
    fi
    }

    getsession() {
    session=`awk '/^[[:space:]]*session[[:space:]]*=[[:space:]]*/{print($3)}' "$CONFIG"`
    echo $session
    }

    getprange() {
    ports=`awk '/^[[:space:]]*port_range[[:space:]]*=[[:space:]]*/{print($3)}' "$CONFIG" | sed "s/-/ /"`
    echo $ports
    }

    getdhtport() {
    dht_port=`awk '/^[[:space:]]*dht_port[[:space:]]*=[[:space:]]*/{print($3)}' "$CONFIG"`
    echo $dht_port
    }

    fwopen() {
    DHT_PORT=`getdhtport "$CONFIG"`
    iptables -D INPUT -j DROP
    PORTS=$(seq `getprange "$CONFIG"`)
    for P in $PORTS; do
    iptables -I INPUT -i "$1" -p tcp --syn --dport $P -j ACCEPT
    done
    if [ $DHT_PORT ]; then
    iptables -I INPUT -i "$1" -p tcp --dport $DHT_PORT -j ACCEPT
    fi
    iptables -A INPUT -j DROP
    }

    fwclose() {
    DHT_PORT=`getdhtport "$CONFIG"`
    PORTS=$(seq `getprange "$CONFIG"`)
    for P in $PORTS; do
    iptables -D INPUT -i "$1" -p tcp --syn --dport $P -j ACCEPT
    done
    if [ $DHT_PORT ]; then
    iptables -D INPUT -i "$1" -p tcp --dport $DHT_PORT -j ACCEPT
    fi
    }

    d_start() {
    [ -d "${BASE}" ] && cd "${BASE}"
    fwopen
    stty stop undef && stty start undef
    $EXSC -ls | grep ".$SRNAME[[:space:]]" > /dev/null || $EXSC -dm -S $SRNAME
    # without sleep screen may not be sometimes ready to start anything
    sleep 3
    $EXSC -S "$SRNAME" -X screen nice $EXEC $OPTIONS
    for I in 0:3 ; do
    if [ -n "`pidof $NAME`" ]; then
    logger -t $NAME "Started PID: `pidof $NAME`"
    break
    fi
    sleep 1
    done
    }

    d_stop() {
    fwclose
    session=`getsession "$CONFIG"`
    if ! [ -s ${session}/rtorrent.lock ] ; then
    logger -t $NAME "Lock file failed: ${session}/rtorrent.lock"
    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
    logger -t $NAME "Stopped PID: $PID"
    sleep 1
    for I in 0:5 ; do
    PSE=`ps -p $PID | grep "$PID"`
    if [ -z "$PSE" ]; then
    break
    fi
    sleep 1
    done
    fi
    SCSTOP=`$EXSC -list | grep "\.$SRNAME" | awk '{print($1)}' | sed "s/\.$SRNAME//"'`
    if [ -n "$SCSTOP" ]; then
    kill $SCSTOP
    logger -t $NAME "Stopped screen: $SCSTOP"
    fi
    }

    checkcnfg

    case "$1" in
    start)
    echo "Starting $NAME"
    d_start
    echo "."
    ;;
    stop)
    echo "Stopping $NAME"
    d_stop
    echo "."
    ;;
    restart|force-reload)
    echo "Restarting $NAME"
    d_stop
    sleep 1
    d_start
    echo "."
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
    esac

    exit 0

Új hozzászólás Aktív témák