Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 15/07/2010, à 10:53

papimalin

Commande at [RESOLU]

bonjour a tous
J'avais un pb au niveau de mon client ftp. J'avais fait un script pour automatiser la récupération d'un fichier en ftp sur un serveur. Le gros problème était que lorsque je perdais ma connexion (ce qui arrive souvent parce que je passe par un modem GPRS)  le client FTP plantait. J'ai donc décidé de détruire la tache ftp en récupérant son PID et en la tuant ci celle ci depassait un certain temps d'activité.
Pour effectuer cette action je fais appel à la commande at mais je n'arrive pas l'utiliser  sur une fonction.
Voici mon code

#!/bin/sh

degreane()
{

if [ X"$1" != X"" ]; then

echo "aie"
kill -9 $pid
else 

echo "OK"

fi 
}
/etc/ppp/test &   #script qui lance mon client ftp

pid=$(ps -C ftp -o pid=) #recupération du pid du ftp
echo "$pid"

degreane $pid
echo "degreane $pid" | at now + 1 minutes

Si vous avez des idées n'hésitait pas
Merci d'avance
seb

Dernière modification par papimalin (Le 19/07/2010, à 16:26)

Hors ligne

#2 Le 15/07/2010, à 12:35

credenhill

Re : Commande at [RESOLU]

hello
la fonction degreane est locale à ce script et n'est pas "passée" à la commande at.
pour récupérer le pid de la tâche soumise en arrière-plan, utiliser pid=$!

Hors ligne

#3 Le 15/07/2010, à 12:37

jaax

Re : Commande at [RESOLU]

Bonjour,

Pour moi le problème vient du fait que tu passe à la commande at le nom d'une fonction.

at va chercher dans le PATH une commande du nom degreane. Ne la trouvant pas, erreur !

Créé un script nommé degreane que tu mets dans le PATH.


Cordialement,
Jaax
_________________________________________________________________
http://www.worldofunix.fr - [Administration systèmes Unix/Linux]

Hors ligne

#4 Le 15/07/2010, à 12:44

papimalin

Re : Commande at [RESOLU]

Si je comprends bien pour que ma fonction passe avec la commande at il faut la mettre en globale. Comment peux tu mettre un fonction en globale alors avec un export ?

Hors ligne

#5 Le 15/07/2010, à 12:51

jaax

Re : Commande at [RESOLU]

Je ne pense pas que ce soit possible.

Comment dire à la commande at dans quel fichier trouver la fonction ?
export c'est pour les variables d'environnement.


Cordialement,
Jaax
_________________________________________________________________
http://www.worldofunix.fr - [Administration systèmes Unix/Linux]

Hors ligne

#6 Le 15/07/2010, à 12:57

credenhill

Re : Commande at [RESOLU]

la commande at n'étant pas attachée avec un terminal, les echo ne s'afficheront pas dans ta fenêtre, si c'est le but.

echo "ps $pid > /dev/null && kill $pid" | at now + 1 minutes

tu peux aussi ne pas utiliser la commande at mais un sleep, là la fonction est reconnue

...
sleep 60
degreane $pid

Dernière modification par credenhill (Le 15/07/2010, à 13:13)

Hors ligne

#7 Le 15/07/2010, à 15:12

papimalin

Re : Commande at [RESOLU]

Premièrement merci pour vos réponses
- Pour credenhill
j'avais deja utilisé cette commande

echo "ps $pid > /dev/null && kill $pid" | at now + 1 minutes

cette commande marchait très bien mais un des problème de cette commande  et que je ne pouvais pas savoir si le ftp s'était mal passé ou si il avait seulement fini de transférer le fichier (il aurai fallu que je mette une boucle if qui me renvoi une variable si la commande était bien utilisée afin de savoir si le transfert s'était bien passé ou pas). Ne sachant pas utiliser le if avec la commande at j'ai pensé a contourner le pb en utilisant une fonction avec le at avec à l'interieur de celle ci ma boucle if (j'éspère être clair).

pour le sleep je l'avais utiliser mais mon transfert ftp ne démarrait plus il restait bloqué comme si la commande sleep le mettait en pause

- Pour jaax
Peux tu s'il te plait me dire comment mettre ma fonction dans le path  ?
Merci d'avance


Ps : C'est quand même bizarre que je n'ai pas reussi a trouver une option timeout dans le man ftp

Hors ligne

#8 Le 15/07/2010, à 15:41

papimalin

Re : Commande at [RESOLU]

Jaax est ce la commande à utiliser sachant que /etc/ppp/test correspond au script dans lequel se trouve ma fonction degreane 
export PATH=$PATH:/etc/ppp/test
merci

Hors ligne

#9 Le 15/07/2010, à 16:08

jaax

Re : Commande at [RESOLU]

Certains scripts ont des fonctions qui se nomment de la même façon sans pour cela faire la même chose.

Prends comme exemple les scripts rc. Ils ont tous une fonctions start, stop, status...

Sépare en deux scripts. Le premier qui lance la commande FTP, et l'autre qui vérifie son état.

#!/bin/sh

/etc/ppp/test &
pid=$(ps -C ftp -o pid=)

/home/ton_user/degreane $pid
echo "/home/ton_user/degreane $pid" | at now + 1 minutes

exit 0
#!/bin/sh

if [ X"$1" != X"" ]
then
	echo "aie"
	kill -9 $pid
else 
	echo "OK"
fi 

exit 0

Cordialement,
Jaax
_________________________________________________________________
http://www.worldofunix.fr - [Administration systèmes Unix/Linux]

Hors ligne

#10 Le 16/07/2010, à 16:39

papimalin

Re : Commande at [RESOLU]

bon ca y est j'ai enfin resolu le problème avec un simple sleep comme me l'avait conseillé credenhill (il marchait pas au début car j'avais mal fait ma chaine de commande ftp)
un grand merci à credenhill et Jaax pour leur précieuse aide

Hors ligne

Haut de page ↑