Outils du site

Outils pour utilisateurs

Action disabled: register

Panneau latéral

P2PFR:Wiki

p2p:rtorrent:configurer-watchdirs (lu 7047 fois)

Configurer un «watchdir»

Un répertoire «watch» ou «watchdir» est un répertoire où l'on entrepose des fichiers .torrent, qui sont alors automatiquement chargés dans notre client bittorrent sans intervention particulière de notre part.

C'est un confort d'usage, d'autant que les fichiers torrents qui attérissent dans le watchdir peuvent eux-mêmes provenir d'autres logiciels (flexget…) qui automatisent la récupération des fichiers .torrent pouvant provenir de diverses sources.

Methode classique

Doc externe :

On voit qu'il y a plusieurs approches.

Ajoutons un schedule (= une tâche planifiée) à notre fichier rtorrent.rc.

# planifier une tâche nommée 'watch_directory_1':
# 1) se déclenche 5 secondes après le démarrage de rtorrent
# 2) se déclenche toutes les 10 secondes après cela
# 3) Lorsque déclenché, essaie de charger (et démarrer) les nouveaux fichiers *.torrent situés dans le répertoire ~/téléchargements/watch/
# 4) ???
# NOTE: si vous ne souhaitez pas démarrer automatiquement le torrent, changez 'load.start' par 'load.normal'

schedule = watch_directory_1, 5, 10, "load.start=~/téléchargements/watch/*.torrent,d.directory.set=~/téléchargements/complete/"

On peut ajouter d'autres lignes schedule, pour surveiller d'autres répertoires.

# planifier une tâche nommée 'watch_directory_2':
# 1) se déclenche 10 secondes après le démarrage de rtorrent
# 2) se déclenche toutes les 10 secondes après cela
# 3) Lorsque déclenché, essaie de charger (et démarrer) les nouveaux fichiers *.torrent situés dans le répertoire ~/téléchargements/watch_musique/
# 4) ???

schedule = watch_directory_2, 10, 10, "load.start=~/téléchargements/watch_musique/*.torrent,d.directory.set=~/téléchargements/musique/"

J'aimerais pouvoir écrire :

4) Ajuste le répertoire de destination dans lequel seront déplacés les fichiers une fois le téléchargement terminé.

Ce qui me laisse dubitatif ici, c'est que :

  • avant, il fallait gérer l'évènement “finished” pour initier soi-même le déplacement des fichiers avec une commande mv.
  • ici, on n'utilise pas de variable “custom” intermédiaire, on ajuste directement d.directory.

Voir aussi : http://superuser.com/questions/410507/move-already-i-e-not-new-completed-files-in-rtorrent

Methode inotify

Sembleraient qu'ils aient voulu simplifier la chose dans les versions récentes de rtorrent.

Méthode ruTorrent+autotools

Si vous utilisez ruTorrent, celui-ci dispose d'un plugin autotools, qui gère à la fois les répertoires watch et le déplacement des fichiers, ainsi que leur étiquettage (label).

Méthode pyroscope

On peut utiliser pyrotorque, avec l'instruction job.treewatch.

Suivez la documentation officielle. Elle est cependant un peu incomplète.

Pour bien comprendre, afin de faire fonctionner le tout, on a besoin de plusieurs briques :

  1. on doit faire en sorte que pyrotorque soit invoqué par rtorrent
  2. pyrotorque doit être réglé pour surveiller un répertoire (ou plutôt une arborescence dans le cas présent) watch
  3. on doit ajouter un évènement dans rtorrent, pour qu'il démarre un script bash lorsque le torrent est terminé (“completion”)
  4. ce script (_event.download.finished-cequelonveut.sh) doit être écrit à la main

Invocation de Pyrotorque par rtorrent

Définir un répertoire watch

Il faut donc créer les répertoires watch, et indiquer son chemin dans torque.ini.

Gérer l'évènement «torrent terminé» dans rtorrent

1) Dans notre rtorrent.rc, on doit s'assurer qu'il y a une ligne :

# EVENT: Call bash completion handlers
method.set_key = event.download.finished, bash_handlers, "d.save_full_session= ; execute=~/bin/_event.download.finished,$d.hash=,$d.name=,$d.base_path="

2) Le code ci-dessus montre qu'on a besoin d'un fichier ~/bin/_event.download.finished. Vous devez le copier à la main, Pyroscope le fournit.

3) Pyrotorque ne tourne que si le fichier ~/.pyroscope/run/pyrotorque existe.

touch ~/.pyroscope/run/pyrotorque

Scripts de gestion du torrent terminé

rtorrent va appeller le script _event.download.finished en fournissant quelques arguments, dont le hash du torrent qui vient d'être completé.

Hélas, le fichier _event.download.finished fourni par pyroscope est incomplet. Il ne fait qu'appeller d'autres scripts dont le nom correspond à ~/bin/_event.download.finished-*.sh.

On va donc créer un fichier ~/bin/_event.download.finished-mv.sh avec ce contenu (basé sur cette doc) :

#!/bin/bash
 
# Remplacez "rtorrentuser" par le nom de l'utilisateur qui possède les outils pyroscope
RTBIN="/home/rtorrentuser/bin"
 
function rt_create_targetdir() {
        targetdir=$($RTBIN/rtcontrol "hash=$1" -qo custom_targetdir)
        mkdir -p "$targetdir"
}
 
function rt_mv_then_restart() {
        $RTBIN/rtcontrol "hash=$1" --stop
        $RTBIN/rtcontrol "hash=$1" --exec "directory.set={{item.custom_targetdir}}" -o custom_targetdir --yes
        $RTBIN/rtcontrol "hash=$1" --spawn "mv {{item.path}} {{item.custom_targetdir}}" -o custom_targetdir
        sleep 1
        $RTBIN/rtcontrol "hash=$1" --start
}
 
rt_create_targetdir "$1"
rt_mv_then_restart "$1"

Que fait ce script ?

D'abord, il créé le répertoire de destination. Ce n'est pas nécessaire si vous en avez un nombre défini que vous pouvez créer à la main.

Dans la seconde fonction, il met en arrêt le téléchargement. Ensuite, il indique à rtorrent que les fichiers du téléchargement sont situés ailleurs (dans le targetdir qu'on a écrit dans torque.ini).

Puis il déplace le fichier, et redémarre le téléchargement qui sera donc en seed, tout en ayant ses fichiers situés à leur emplacement final.

On pourrait aussi utiliser rtmv pour laisser les fichiers dans /work/. Et puisque le fichier dans /work/ existerait toujours en tant que lien symbolique, il n'est pas utile de signaler à rtorrent que son emplacement a changé.

N'oubliez pas de rendre exécutables les fichiers _event.download.finished* :

chmod +x ~/bin/_event.download.finished*
p2p/rtorrent/configurer-watchdirs.txt · Dernière modification: le 21/01/2017 à 22h27 de 111110101011