web-dev-qa-db-fra.com

Monsieur Transmission, éteignez le PC une fois tous les téléchargements terminés!

#!/bin/bash
echo "password" | Sudo -S halt

J'ai pointé ce script sur l'option " Appeler le script lorsque le torrent est terminé " sous: Edit > Preferences > Downloading

Problème: ce script éteint l'ordinateur après le téléchargement alors qu'il y a plus de torrents dans la file d'attente!

Comment puis-je l'améliorer?

3
mini

Tout d'abord, arrêtez de vous arrêter avec root. tilisez dbus .

Ensuite, mettez quelque chose dans votre script qui détecte les torrents en cours d'exécution. Voici un petit quelque chose qui utilise trasmission-remote pour compter le nombre de torrents en cours d'exécution qui ne sont pas "Terminé":

transmission-remote --list | sed '1d;$d' | grep -v Done | wc -l

Pour intégrer cela dans votre script:

count=$(transmission-remote --list | sed '1d;$d' | grep -v Done | wc -l)
if [ $count -eq 0 ]; then
    dbus-send --system --print-reply --dest=org.freedesktop.Hal \
        /org/freedesktop/Hal/devices/computer \
        org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
fi

Je ne suis pas un utilisateur de transmission, ma recherche peut donc être légèrement en retrait, mais cela devrait faire l'affaire. Vous constaterez peut-être qu'il ne s'arrête pas tout le temps s'il y a des torrents à l'intérieur, par exemple, en pause. Si c'est le cas, jouez avec le résultat et une clause grep -v pour gérer les choses.

En outre, vous souhaiterez peut-être un arrêt chronométré afin de ne jamais vous retrouver dans une situation où le poste de travail sera arrêté pendant que vous y êtes (pour pouvoir l'abandonner). Peut-être juste une vérification supplémentaire là-bas pour voir quelle heure il est.

Remarque: transmission-remote vous oblige à activer l'accès Web à la transmission depuis ses options.

4
Oli

Comme @Henning l'a dit, utilisez la transmissionrpc pour obtenir le statut de tous les torrents. Si aucun d'entre eux n'est toujours actif, vous pouvez continuer et éteindre votre ordinateur.

J'ai écrit un petit programme dans Python pour le faire. Vous pouvez le trouver ici .

0
rohithpr

Transmission offre une interface RPC qui vous permet de communiquer avec Transmission par programmation. Avec cela, vous pouvez écrire un script qui est exécuté après le téléchargement d'un torrent, comme vous le faites maintenant. Ce script vérifie via l'interface RPC s'il y a encore des torrents en cours de téléchargement. Seulement si aucun n'est trouvé, le système est arrêté, sinon le script se ferme sans rien faire (et attend d'être rappelé une fois que le torrent suivant se termine).

Je ne sais pas si vous pouvez parler à l'interface RPC dans un script bash, mais selon le Transmission Homepage , il existe des "bibliothèques de contrôle à distance" à utiliser dans Ruby, Python, PHP ou Perl. Il ne devrait donc pas être difficile d'écrire un script dans l'une de ces langues pour effectuer la tâche décrite ci-dessus.

0
Henning Kockerbeck