Скрипт отключения передачи для нескольких торрентов?

Я написал сценарий отключения для передачи. Передача вызывает скрипт после завершения загрузки торрента. Скрипт отлично работает на моей машине (Ubuntu 11.04 и 12.04).

#!/bin/bash
sleep 300s

# default display on current host
DISPLAY=:0.0

# find out if monitor is on. Default timeout can be configured from screensaver/Power configuration.

STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
echo $STATUS

if [ "$STATUS" == "  Monitor is On" ]

###  Then check if  its still downloading a torrent. Couldn't figure out how.(May be) by monitoring network downstream activity? 

then

    notify-send "Downloads Complete" "Exiting  transmisssion now"
    pkill transmission

else
    notify-send "Downloads Complete" "Shutting Down Computer"
    dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

fi

exit 0

Проблема в том, что когда я загружаю более одного файла, когда заканчивается первый, передача выполняет сценарий. Я хотел бы сделать это, но после завершения всех загрузок.

Я хочу поставить 2-ую проверку (сразу после проверки монитора), если он все еще загружает другой торрент.

Есть ли способ сделать это?

4
задан 18 October 2012 в 20:28

3 ответа

Простой сценарий.

Спасибо Khurshid Alam и user98677 Я написал этот скрипт, который работает нормально. Если дисплей включен (вы работаете), он заставляет Transmission завершить работу и отправляет уведомление, если компьютер не выключен.

  1. установить

    sudo apt-get install transmission-cli libnotify-bin
    

    в Ubuntu 16.04

    sudo apt install transmission-cli libnotify-bin
    
  2. Передача> Предпочтения> Удаленный> Отметить Разрешить удаленный доступ, убедитесь, что порт HTTP 9091 и разрешить только эти IP-адреса 127.0.0.1 (по умолчанию).
  3. Скопируйте, вставьте данный скрипт, сохраните как «shutdown.sh» и сделайте его исполняемым.
  4. Передача> Настройки> Загрузка> Проверьте «Вызов сценария после завершения загрузки», перейдите к сценарию.
  5. Системные настройки> Питание> Яркость экрана> Отключение экрана, когда он неактивен в течение> выбора разумного времени.

    #!/bin/bash
    sleep 300s
    DISPLAY=:0.0
    STATUS=$(xset -display $DISPLAY -q | grep 'Monitor')
    STATE=$(transmission-remote 127.0.0.1:9091 -tall --info | grep "^  State:" | grep "Down" | wc --lines)
    if
        [ "$STATUS" == "  Monitor is On" ] && [ "$STATE" == "0" ]
    then
        notify-send "Downloads Complete" "Exiting  transmisssion now"
        pkill transmission
    elif
         [ "$STATE" == "0" ]
    then
        #in Ubuntu 16,04
        shutdown -h now
        #in older versions use the following
        #dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
    fi
    exit 0
    
0
ответ дан 18 October 2012 в 20:28

Эта информация не передается в сценарии через переменные среды, поэтому вам необходимо запросить RPC-интерфейс Transmission. Это иногда делается клиентскими библиотеками - например, скрипт Python может использовать python transmissionrpc . Существуют и другие интерфейсы, подобные этому, перечисленные на http://www.transmissionbt.com/resources/ .

Вот быстрый подход, который использует передачу с удаленного доступа для подсчета числа не холостые загрузки:

transmission-remote yourhost:yourport -tall --info | grep "^  State:" | grep "Down" | wc --lines

Если вы также хотите включить холостые загрузки, вы можете попробовать это:

transmission-remote yourhost:yourport -l | grep -v -e " 100% " -e "^Sum" -e "^ID" -e " Stopped " | wc --lines

Где «^ ID» и «^ Sum» удаляют верхний и нижний колонтитулы ; «100%» полосы завершены торрентами; и «Остановленный» удаляет незавершенные, но приостановленные торренты. Этот подход не является надежным - например, торрент с именем «100% остановлен» сломает его.

0
ответ дан 18 October 2012 в 20:28

Я создал лучший сценарий (от user98677 совета), который использует в своих интересах Интерфейс RPC передачи.

Код:

Суть GitHub: https://gist.github.com/khurshid-alam/6474227

Что это Делает?

  1. Пауза или удаляет завершенные потоки после того, как они будут завершены.

  2. Отправьте слабое уведомление (с завихрением) [дополнительный]

  3. Отправьте уведомление Твиттера (требует twidge) [дополнительный]

  4. Приостановите/Завершите работу Компьютер ИЛИ оставьте его как есть.

Pushover Notification From Transmission

Снимок экрана


Установка

На Ubuntu

sudo apt-get install libnotify-bin
sudo apt-get install transmission-cli

На Ubuntu> = 13.04 (Для уведомления Твиттера):

sudo add-apt-repository ppa:moorhen-core/moorhen-apps
sudo apt-get install twidge

Для suspend действие с дистрибутивом не-Ubuntu (Ubuntu использует Upower), пакет powermanagement-интерфейса установки

sudo apt-get install powermanagement-interface

После установки:

  1. Получите код от сути GitHub и сохраните файл как trsm где угодно на Вашем жестком диске. Сделайте исполняемый файл файла chmod a+x trsm .

  2. Войдите в слабого соперника и скопируйте свой пользовательский ключ. Вставьте его под user-key в сценарии.

  3. Если Вы хотите уведомления, отправляют с симпатичным приложением (передача), значок просто создает поддельное приложение в слабом сопернике со значком передачи и затем копирует ключ приложения (Ключ API/маркера) и вставляет его под app-key в сценарии.

  4. Для Твиттера установка см. twidge документацию.

  5. Открытая передача. Перейдите к предпочтению-> сеть. Включите веб-клиент (порт по умолчанию 9091) И включите аутентификацию пользователя. Выберите имя пользователя и пароль. Помещенный, что имя пользователя и пароль в сценарии как username & password соответственно.

  6. Нажмите открытый веб-клиент, чтобы проверить, работает ли он правильно.

  7. Наконец сохраните сценарий и перейдите к загрузке вкладки (в предпочтении передачи) и щелчок call script when torrent is complete. Выберите соответствующий сценарий.


Сценарий

#!/bin/bash


user-key=" "  #put your pushover user-key
app-key=" "  #put your pushover application-key
device=" "    #Your device name in pushover

username=" "  # Transmission remote username
password=" "   # Transmission remote password



sleep 100s

# default display on current host
DISPLAY=:0.0

# authorize transmission
trsm="transmission-remote --auth $username:$password"

# find out number of torrent

TORRENTLIST=`$trsm --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=' ' --fields=1`

for TORRENTID in $TORRENTLIST
do
 echo "* * * * * Operations on torrent ID $TORRENTID starting. * * * * *"

 #echo $TORRENTID

 DL_COMPLETED=`$trsm --torrent $TORRENTID --info | grep "Percent Done: 100%"`

 #echo $DL_COMPLETED

# pause completed torrents & get those torrent names.

 if [ "$DL_COMPLETED" != "" ]; then
  $trsm --torrent $TORRENTID --stop
  trname=`$trsm --torrent $TORRENTID --info | grep "Name:" | awk -F: '{print $NF}'`

  # post an update to twitter

  echo "$trname download was completed" | twidge update  # Put "#" if you don't need this.

  # push update for pushover

  curl -s \
    -F "token=$user-key" \
    -F "user=$app-key" \
  # -F "device=$device" \  # uncomment, if you want to send notification to a particular device.
    -F "title=Download Finished" \
    -F "message=$trname download has completed." \
    http://api.pushover.net/1/messages > /dev/null

  # The following codes works assuming One take advantage of gnome-power-manager by setting "black screen after 2/5/10/.. minitues ". 
  # if monitor(Including laptop screen but EXCLUDING external monitor) is on, it will  just force blank the screen, if not, it will shutdown/suspend or leave it as it is.
  # Modify it as per your requirement.

  STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
  #echo $STATUS

  if [ "$STATUS" == "  Monitor is On" ]
  then
      notify-send "Downloads Complete" "turning off the screen now"
          xset dpms force off

  else
      notify-send "Downloads Complete" "$trname"

        # uncomment to shutdown the computer
        #dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

        # uncomment to suspend (on ubuntu)
        #dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

        # uncomment to suspend (on Linux) (requires powermanagement-interface package)
        #pmi action suspend

 else
  echo "Torrent #$TORRENTID is not completed. Ignoring."
 fi

done
4
ответ дан 18 October 2012 в 20:28

Другие вопросы по тегам:

Похожие вопросы: