Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/10/2013, à 13:28

artik1024

Executer une extraction automatique après un téléchargement

Bonjour à tous ! J'ai un script qui mit bout à bout fonctionne impeccablement. Pour comprendre mon besoin d'aide, je décompose dans ce dernier ces actions :

1. Mon script se logue en ssh sur mon NAS (sur mon réseau local)
2. Il récupère depuis un serveur distant un dossier en utilisant "rsync" sur mon NAS
3. Soit je n'ai pas de coupure internet auquel cas il m'affiche un message de complétion, soit le net à coupé et il relance automatiquement rsync.

Sauf qu'après tout ça, je souhaiterais qu'il extract avec unrar automatiquement ce qu'il trouve dans le dossier qu'il vient de télécharger. J'ai ma commande de base pour l'extraction :

find -iname "*rar" -exec unrar e {} \;

J'ai essayé tout un tas de choses, mais je ne parviens pas au résultat que je souhaite, à savoir :

1. que ce soit le NAS qui extraie le contenu de mon dossier récupéré, et non ma machine locale sur laquelle je lance le script.
2. Que ce contenu soit extrait dans le dossier lui même et non à la racine de mon NAS
3. Que ça fonctionne si rsync doit synchroniser 3 dossiers différents. Mon script s'appelle "recup", et sur mon serveur distant j'ai 3 dossiers : A B et C. je vais donc lancer :

recup A B C

Comment faire pour que le contenu de A B et C soit extrait ?

Voilà mon script :

#!/bin/bash
while [ 1 ]
do
	argument="rsync -avhSs --partial --timeout=120 --progress --append-verify "
	for var in "$@"
	do
		argument=$argument"moi@94.25.26.36:'/home/moi/"$var"' "
	done
	argument=$argument"/volume1/nas/folders/; exit;"
	ssh root@192.168.0.2 -t $argument
	if [ "$?" = "0" ] ; then
		echo -e "
			\e[1;32mrsync completed normally\e[0m
			"
		exit
	else
		echo -e "
			\e[1;31mRsync failure. Backing off and retrying...\e[0m
			"
		sleep 20
	fi
done

Merci beaucoup à ceux qui se pencheront sur mon problème.

Dernière modification par artik1024 (Le 26/10/2013, à 13:34)

Hors ligne

#2 Le 26/10/2013, à 14:18

Zakhar

Re : Executer une extraction automatique après un téléchargement

Je ne comprends pas bien ton problème.

Quel est ton NAS ?

Si tu peux te connecter dessus en ssh, tu peux en principe lancer des scripts sur le NAS, et c'est donc bien ton NAS qui fera le unrar et pas ton PC local. Ton PC local ne fera qu'afficher le résultat du rsync via ssh.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#3 Le 27/10/2013, à 00:52

artik1024

Re : Executer une extraction automatique après un téléchargement

Le NAS importe peu. Je lance mon script depuis une machine connectée en réseau à mon NAS, mais je souhaite que LUI fasse le boulot. C'est pas vraiment un problème, mais plutôt de l'optimisation. J'ai réussi en rajoutant la commande find à faire ça :

#!/bin/bash
while [ 1 ]
do
	argument="rsync -avhSs --partial --timeout=120 --progress --append-verify "
	for var in "$@"
	do
		argument=$argument"moi@94.25.26.36:'/home/moi/"$var"' "
	done
	argument=$argument"/volume1/nas/folders/; exit;"
	ssh root@192.168.0.2 -t $argument
	if [ "$?" = "0" ] ; then
		echo -e "
			\e[1;32mrsync completed normally\e[0m
			"
			find /home/moi/$@/ -iname "*rar" -exec unrar e {} /home/moi/$@ \;
		exit
	else
		echo -e "
			\e[1;31mRsync failure. Backing off and retrying...\e[0m
			"
		sleep 20
	fi
done

La dans ce cas c'est la machine sur laquelle je lance le script qui extrait (et encore je manque d'argument pour le moment). Je voudrais que ce soit le NAS qui extrait du coup wink

Hors ligne

#4 Le 27/10/2013, à 02:21

J5012

Re : Executer une extraction automatique après un téléchargement

pour que le nas fasse les operations intermediaires, il doit pouvoir aussi lancer le script :

tu mets le script sur ton nas avec les bons outils (rsync et unrar), puis en ssh tu lances ce script dans l'env nas

pour le desarchivage dans le dossier courant il suffit de specifier a unrar d'utiliser le chemin relatif

Hors ligne

#5 Le 27/10/2013, à 08:51

Zakhar

Re : Executer une extraction automatique après un téléchargement

J5012 a écrit :

pour que le nas fasse les operations intermediaires, il doit pouvoir aussi lancer le script :

tu mets le script sur ton nas avec les bons outils (rsync et unrar), puis en ssh tu lances ce script dans l'env nas

pour le desarchivage dans le dossier courant il suffit de specifier a unrar d'utiliser le chemin relatif

Tout à fait !

C'est exactement ce que je disais au post #2

Je ne vois pas bien ce qui t'empêche de procéder ainsi.

Ou plutôt si, et c'est pourquoi je te demandais quel NAS tu as. J'ai un Synology et il y a un "bug" sur le détachement de process dans Ash (le moteur de shell utilisé par Synology). Le "bug" fait que même en faisant :

nohup commande 1>/dev/null 2>/dev/null &

... la commande n'est pas réellement détachée, et si on ferme le ssh qui l'a lancée, la commande est tuée, ou au mieux, s'il s'agissait d'un shell, le shell s'arrête après la commande en cours.

Pour contourner cela, il suffit d'utiliser screen.

Celui-ci possédant une fonction permettant de le détacher, on peut alors lancer des scripts sur le Synology, détacher, et éteindre le PC. Le NAS s'occupe alors de tout sans avoir besoin de laisser le PC allumé... ce qui est quand même à la base ce qu'on a besoin de faire.

... en effet, artik1024, à partir du moment où tu dois laisser ton PC allumé, faire tourner le script sur ton PC ou ton NAS a largement moins d'importance, si ce n'est possiblement une question d'optimisation... mais en général les NAS ont des processeurs plus lents que nos PC, et pas sûr que tu optimises vraiment.

Avec screen, et les scripts détachés, tu peux toujours voir le résultat final quand tu rallumes ton PC. Il suffit de se remettre en ssh, et de relancer :

screen -r

Aussi, screen est très efficace pour avoir plusieurs shells qui tournent sur ton NAS. Sans cela, tu es obligé de lancer plusieurs SSH. C'est très lourd et ça prend bien plus de place en mémoire sur ton NAS.
Screen tu fais : CTRL + C, et hop, tu as créé un autre shell.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne