vendredi 1er mai 2015 (), par
Il existe pour Firefox le plugin Auto Shutdown NG, à combiner avec DownThemAll, qui permet d’éteindre l’ordinateur après la fin de tous les téléchargements, mais ce système est limité aux téléchargements "classiques" par Firefox.
Les téléchargements de média (musique/vidéo) capturés depuis un Flash Player avec un plugin comme Flashgot ne sont pas pris en compte par DownThemAll et Auto Shutdown, d’où la création de ce petit script.
Ce script bash Linux, par ailleurs très simple, surveille le téléchargement ou la copie d’un fichier, et arrête le système lorsque le téléchargement/copie est terminé ou planté.
Cela permettre de suivre un téléchargement par Firefox, par FTP (Filezilla...) ou même une copie de fichier.
La progression ou l’échec sont déterminés par l’évolution ou la non évolution de la taille du fichier.
Il serait possible de traiter un dossier au lieu d’un fichier, en remplaçant la commande ls -l
par une commande du -s
.
Le lancement du script se fait en root
, ou en passant par une délégation sudo
(avec option NOPASSWD) afin d’avoir le droit d’éteindre l’ordinateur par la commande Shutdown, ce qui est la méthode la plus simple.
il serait possible de changer la commande d’extinction pour pouvoir lancer le script avec un utilisateur normal sans se soucier des restrictions système.
Il serait également possible de traiter non pas un fichier en mettant sa taille dans une variable, mais un liste de fichiers avec leurs tailles dans un tableau.
On appelle ce script avec le nom et chemin (de préférence) absolu du fichier, en entourant la chaîne de guillemets pour protéger les espaces et caractères spéciaux.
Les messages d’information et d’erreur sont affichés à l’écran en plus d’être écris dans un fichier journal (ici script.log
)
L’algorithme est assez simple :
#!/bin/bash
taille=1;
oldtaille=0;
fichier=$1;
echo "Surveillance du téléchargement de ${fichier}"
if [ -e "$fichier" -a -f "$fichier" ]
then
echo "le fichier existe et est bien de type fichier, on continue" | tee -a script.log;
while [ $oldtaille != $taille ]
do
if [ -e "$fichier" -a -f "$fichier" ]
then
oldtaille=$taille;
taille=$(ls "$fichier" -l | awk '{ print $5 }' | awk -FM '{ print $1 }');
echo "Le $(date), avant : $oldtaille, maintenant : $taille" | tee -a script.log;
if [ $oldtaille != $taille ]
then
sleep 30m;
fi
else
else
qui éteindrai alors directement le système à l’intérieur de la boucle while
. echo "Le fichier n'existe plus, le téléchargement a planté" | tee -a script.log;
taille=0;
oldtaille=0;
fi
done
A la fin de la boucle
on éteint le système.
echo "fin du script le $(date), taille = $taille, avant = $oldtaille" | tee -a script.log
shutdown -hP now
else
echo "fichier non trouvé.";
fi