Pages : 1
#1 Le 15/07/2010, à 09: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, à 15:26)
Hors ligne
#2 Le 15/07/2010, à 11: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, à 11: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, à 11: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, à 11: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, à 11: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, à 12:13)
Hors ligne
#7 Le 15/07/2010, à 14: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, à 14: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, à 15: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, à 15: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
Pages : 1