Currently there’s no queue features in Transmission. Luckily we can improvise this with the help of transmission-remote, a command based client for transmission, and along with some Linux bash scripting.
Below I have created a simple bash script:
1. Install transmission remote:
sudo apt-get install transmission-cli
2. Copy the script below, and save as my_script_name.sh , (or whatever name you prefer, but note the .sh extension).
#!/bin/sh # ************* # Configuration REMOTE="/usr/bin/transmission-remote" USERNAME="my_username" PASSWORD="my_password" MAXDOWN="max_number_of_torrent_to_download" MAXACTIVE="max_active_torrent" CONFIG="/my_location_to_transmission_config_file/settings.json" TRANSOPTS="127.0.0.1:my_port_number" # ************* # Set-up variables CMD="$REMOTE $TRANSOPTS --auth $USERNAME:$PASSWORD" LOGCMD="/usr/bin/logger -t transmission-queue " MAXRATIO=$(cat $CONFIG | grep \"ratio-limit\":) MAXRATIO=${MAXRATIO#*\"ratio-limit\": } MAXRATIO=${MAXRATIO%*, } # ************* # deal with downloads DOWNACTIVE="$($CMD -l | tail --lines=+2 | grep -v 100% | grep -v Sum | grep -v Stopped | grep -v Verifying | grep -v Will\ Verify | wc -l)" if [ $MAXDOWN -lt $DOWNACTIVE ]; then DOWNTOSTOP="$($CMD -l | tail --lines=+2 | grep -v 100% | grep -v Sum | grep -v Stopped | grep -v Verifying | grep -v Will\ Verify | tail -n $(expr $DOWNACTIVE - $MAXDOWN) | awk '{ print $1; }')" for ID in $DOWNTOSTOP; do NAME="$($CMD --torrent $ID --info | grep Name:)" $LOGCMD "< << $ID: ${NAME#*Name: }" $CMD --torrent $ID --stop >> /dev/null 2>&1 done else [ $(expr $MAXDOWN - $DOWNACTIVE) -gt 0 ] && ( DOWNINACTIVE="$($CMD -l | tail --lines=+2 | grep -v 100% | grep Stopped | wc -l)" [ $DOWNINACTIVE -gt 0 ] && ( DOWNTOSTART="$($CMD -l | tail --lines=+2 | grep -v 100% | grep Stopped | head -n $(expr $MAXDOWN - $DOWNACTIVE) | awk '{ print $1; }')" for ID in $DOWNTOSTART; do NAME="$($CMD --torrent $ID --info | grep Name:)" $LOGCMD ">>> $ID: ${NAME#*Name: }" $CMD --torrent $ID --start >> /dev/null 2>&1 done ) ) fi # Then deal with total active ACTIVE="$($CMD -l | tail --lines=+2 | grep -v Sum | grep -v Stopped | grep -v Verifying | grep -v Will\ Verify | wc -l)" if [ $MAXACTIVE -lt $ACTIVE ]; then TOSTOP="$($CMD -l | tail --lines=+2 | grep 100% | grep -v Stopped | grep -v Verifying | grep -v Will\ Verify | tail -n $(expr $ACTIVE - $MAXACTIVE) | awk '{ print $1; }')" for ID in $TOSTOP; do NAME="$($CMD --torrent $ID --info | grep Name:)" $LOGCMD "< << $ID: ${NAME#*Name: }" $CMD --torrent $ID --stop >> /dev/null 2>&1 done else [ $(expr $MAXACTIVE - $ACTIVE) -gt 0 ] && ( SEEDINACTIVE="$($CMD -l | tail --lines=+2 | grep 100% | grep Stopped | awk -v ratio=$MAXRATIO '{ if (strtonum(substr($0,52,4)) < ratio) print $0 ;}' | wc -l)" [ $SEEDINACTIVE -gt 0 ] && ( TOSTART="$($CMD -l | tail --lines=+2 | grep 100% | grep Stopped | awk -v ratio=$MAXRATIO '{ if (strtonum(substr($0,52,4)) < ratio) print $0 ;}' | head -n $(expr $MAXACTIVE - $ACTIVE) | awk '{ print $1; }')" for ID in $TOSTART; do NAME="$($CMD --torrent $ID --info | grep Name:)" $LOGCMD ">>> $ID: ${NAME#*Name: }" $CMD --torrent $ID --start >> /dev/null 2>&1 done ) ) fi
Save the script on any location you prefer.
3. Create a cron job to run the script. Open the entry to crontab:
crontab -e
4. Let say you want to run the script 5 minutes, the entry on your cron job should be as below:
*/5 * * * * sh /location_to_my_script/my_script_name.sh
Script courtesy of www.4geeksfromnet.com