Script de desligamento de transmissão para vários torrents?

4

Eu escrevi um script de desligamento para transmissão. A transmissão chama o script depois que um download de torrent é concluído. O script funciona perfeitamente na minha máquina (Ubuntu 11.04 e 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

O problema é que quando estou baixando mais de um arquivo, quando o primeiro termina, a transmissão executa o script. Eu gostaria de fazer isso, mas depois que todos os downloads estiverem concluídos.

Eu quero colocar uma segunda verificação (logo após a verificação do monitor) se ainda estiver baixando outro torrent.

Existe alguma maneira de fazer isso?

    
por Khurshid Alam 18.10.2012 / 18:28

3 respostas

5

Esta informação não é passada para os scripts através de variáveis de ambiente, então você precisa consultar a interface RPC da Transmission. Isso às vezes é feito por bibliotecas-cliente - por exemplo, um script Python pode usar python transmissionrpc . Existem outras interfaces como esta listadas no link .

Aqui está uma abordagem rápida que usará transmissão remota para contar o número de downloads não ociosos:

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

Se você quiser incluir também downloads ociosos, tente isso:

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

Onde "^ ID" e "^ Sum" retira o cabeçalho e o rodapé; "100%" tiras completaram torrents; e "Stopped" remove os torrents incompletos, mas pausados. Essa abordagem não é infalível - por exemplo, um torrent chamado "100% parado" o quebraria.

    
por user98677 19.10.2012 / 03:20
4

Eu criei um script melhor (a partir do conselho user98677) que aproveita a interface RPC da transmissão.

Código:

% bl0ck_qu0te%

O que isso faz?

  1. Pause ou remova os torrents concluídos depois de concluídos.

  2. Enviar uma notificação de pushover (com ondulação) [opcional]

  3. Enviar uma notificação do Twitter (requer twidge) [opcional]

  4. Suspenda / Desligue o computador OU deixe-o como está.

Screenshot

Configuração

NoUbuntu

sudoapt-getinstalllibnotify-binsudoapt-getinstalltransmission-cli

NoUbuntu>=13.04(paranotificaçãodoTwitter):

sudoadd-apt-repositoryppa:moorhen-core/moorhen-appssudoapt-getinstalltwidge

Paraaaçãosuspendnadistribuiçãonão-Ubuntu(oUbuntuusaoUpower)instaleopacotepowermanagement-interface

sudoapt-getinstallpowermanagement-interface

Apósainstalação:

  1. Obtenhaocódigode github-gist & amp; salve o arquivo como trsm em qualquer lugar no seu disco rígido. Torne o arquivo executável chmod a+x trsm .

  2. Login para pushover & amp; copie sua chave de usuário . Cole-o em user-key no script.

  3. Se você deseja que as notificações sejam enviadas com um ícone bonito de aplicativo (transmissão), basta criar um aplicativo falso em pushover com o ícone de transmissão & amp; copie a chave do aplicativo (chave API / token) & amp; cole-o em app-key no script.

  4. Para configuração do Twitter, consulte a documentação do twidge.

  5. Transmissão aberta. Ir para preferência- > web. Ativar cliente da Web (porta padrão 9091 ) & amp; habilitar a autenticação do usuário. Escolha um nome de usuário & amp; senha. Coloque esse nome de usuário & amp; senha no script como username & amp; password , respectivamente.

  6. Clique no web-client aberto para verificar se está funcionando corretamente.

  7. Por fim, salve o script & amp; ir para a guia de download (na preferência de transmissão) & amp; clique em call script when torrent is complete . Selecione o respectivo script.

Script

#!/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
    
por Khurshid Alam 09.09.2013 / 18:13
1

Um script simples.

Thanx to Khurshid Alam e user98677 Eu escrevi este script que está funcionando bem. Se a exibição estiver ativada (você está trabalhando), ela fará com que a Transmissão saia e envie uma notificação, caso não o computador esteja desligado.

  1. instale

    sudo apt-get install transmission-cli libnotify-bin
    

    no Ubuntu 16.04

    sudo apt install transmission-cli libnotify-bin
    
  2. Transmission > Preferências > Remoto > Verificar Permitir acesso remoto certifique-se de que a porta HTTP seja 9091 e permita somente que estes endereços IP sejam 127.0.0.1 (padrão).
  3. Copie o script fornecido, salve como "shutdown.sh" e torne-o executável.
  4. Transmission > Preferências > Downloading > Verifique o 'script de chamadas quando o download estiver concluído', navegue até o script.
  5. Configurações do sistema > Brilho da tela para > > Desative a tela quando estiver inativa para > selecione um tempo razoável.

    #!/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
    
por Vijay 12.04.2016 / 15:49