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.

#1 Le 23/04/2010, à 22:31

Malv0iD

Bash : continuer malgré une erreur

Bonjour,

J'essaye de rouler une commande en redirigeant l'erreur vers un fichier mais tout en obligeant le script à continuer. Pour l'instant je n'arrive à rien de concluant.

ma commande :
simpleFoam

J'ai utilisé set -e en haut de mon script.

j'ai teste
set +e
simpleFoam > log 2>&1
set -e
mais le programme bash stoppe tjs ...
J'arrive à le faire continuer quand je fais le même mais avec seulement :
simpleFoam 2>/dev/null
mais cela ne me convient pas car j'ai besoin d'avoir un fichier log contenant l'erreur.

Comment puis-je faire?

D'avance merci pour votre aide

Hors ligne

#2 Le 24/04/2010, à 01:28

nesthib

Re : Bash : continuer malgré une erreur

{ta_commande 2>/dev/null ; } >log

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

#3 Le 24/04/2010, à 09:05

Malv0iD

Re : Bash : continuer malgré une erreur

Merci pour le coup de main mais apparement cela ne marche tjs pas.

La commande s'arrête tjs avec le message d'erreur affiché sad

Hors ligne

#4 Le 24/04/2010, à 09:57

nesthib

Re : Bash : continuer malgré une erreur

désolé, j'ai lu trop vite. Je pensais que tu voulais virer l'erreur et rediriger la sortie standard.

pour rediriger la sortie d'erreur vers ton log fais simplement :

ta_commande 2>log

pas besoin de /dev/null


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

#5 Le 24/04/2010, à 10:29

Malv0iD

Re : Bash : continuer malgré une erreur

pas de soucis mais ça ne peut tjs pas marcher.

Ce que je veux c'est rediriger l'erreur & la sortie standard vers log mais surtout que le programme ne s'arrête pas même si une erreur se produit et :

simpleFoam > log 2>&1

ne marche pas car là ça s'arrête quand même... sad

Hors ligne

#6 Le 24/04/2010, à 11:12

nesthib

Re : Bash : continuer malgré une erreur

tu peux balancer tout ton script ? ce serait plus simple
normalement ton programme ne devrait pas s'arrêter même s'il y a une erreur au milieu.
exemple :

$ cat script_erreur.sh 
#!/bin/bash
echo abcd
ls edoh
echo efgh
ezhjl
echo ijkl

$ ./script_erreur.sh 
abcd
ls: ne peut accéder edoh: Aucun fichier ou dossier de ce type
efgh
./script_erreur.sh: line 5: ezhjl : commande introuvable
ijkl

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

#7 Le 24/04/2010, à 11:34

Malv0iD

Re : Bash : continuer malgré une erreur

Voici le script :

#!/bin/bash -l
set -e

mkdir Geo
cd Geo

ln -s ../param.dat duct.def

~/cado/exe/duct/Duct.exe
#/software/tu/cado.v2/64/exe/duct/Duct.exe


cd ..

mkdir Grid

cd Grid


ln -s ../Geo/ductGeo.jou 

numberoflic=$(ssh rocks5 "qlic" | grep gambit | awk '{ print $7 }')
echo "Nombre de licenses : $numberoflic" >> gambitstate 2>&1
if (($numberoflic<1))
then
	while (($numberoflic<1))
	do
	sleep 10
	numberoflic=$(ssh rocks5 "qlic" | grep gambit | awk '{ print $7 }')
	echo "Nombre de licenses : $numberoflic" >> gambitstate 2>&1
	done
	echo "launching gambit after waiting" >> gambitstate
else
echo "launching gambit immediatly" >> gambitstate
fi
module load gambit/2.4.6 > log 2>&1

error="First try, error is set active"

while [ -n "$error" ] ; do
   echo "error = $error" >> gambitstate
   gambit duct -inp ductGeo.jou > gambit.out 2>&1
   set +e
   error=$(grep "FATAL ERROR: Could not obtain valid license authorization." gambit.out)
   set -e
   sleep 5
done
echo "gambit has finished successfuly" >> gambitstate
echo "error = $error" >> gambitstate



cd ..


mkdir cfd

cd cfd

cp ../Commun/template2dOpenFoamRun/* . -r

module load openfoam/1.6
fluentMeshToFoam ../Grid/duct.msh 
set +e
simpleFoam > log 2>&1
set -e

## check if convergence was reached 
ending=$(tail log | grep "End")
sniffer=$(tail log | grep "reached" | sed 's/: 5e-06//')
if [ "$sniffer" == "reached convergence criterion" ]
	then
	echo "Conv" > Isconv
		## Catching the performance of the geometry
		ptot >> debug.dat 2>&1
		patchAverage ptot outlet > outletPatchAverage
		patchAverage ptot inlet > inletPatchAverage

		outletTotalPressure=$(grep "Average of ptot over patch outlet" outletPatchAverage | tail -1 | sed 's:    Average of ptot over patch outlet.*= ::g')
		inletTotalPressure=$(grep "Average of ptot over patch inlet"  inletPatchAverage | tail -1 | sed 's:Average of ptot over patch inlet.*=::g')

		echo "$inletTotalPressure - $outletTotalPressure " | bc > TotalPressureDrop
		echo "$inletTotalPressure" > InletTotalPressure
		echo "$outletTotalPressure" > OutletTotalPressure
		
		yPlusRAS > yPlus.dat 2>&1
	elif [ "$ending" == "End" ];
	then
		echo "notConv" > Isconv
	else
	echo "Probleme" > Isconv
fi

cd ..

dir=`pwd`
echo "Finished" > Status	
echo "Status = Finished" > ../Status_job
echo "$dir Finished" >> ../../Status_jobs

Hors ligne

#8 Le 24/04/2010, à 12:23

nesthib

Re : Bash : continuer malgré une erreur

peux-tu supprimer ta redirection pour que tout s'affiche sur l'écran et poster ici la sortie lorsque tu lances ton script ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

#9 Le 24/04/2010, à 12:28

Malv0iD

Re : Bash : continuer malgré une erreur

Voici smile :

/*---------------------------------------------------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  1.6                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
Build  : 1.6-f802ff2d6c5a
Exec   : simpleFoam
Date   : Apr 24 2010
Time   : 12:26:14
Host   : aglin3.private.vki.eu
PID    : 24047
Case   : /nobackup/st/bulle/RecupCluster/RANDIND003/DuctAnalysis/cfd
nProcs : 1
SigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Create mesh for time = 0

Reading field p

Reading field U

Reading/calculating face flux field phi

Selecting incompressible transport model Newtonian
Selecting RAS turbulence model LaunderSharmaKE
LaunderSharmaKECoeffs
{
    Cmu             0.09;
    C1              1.44;
    C2              1.92;
    sigmaEps        1.3;
}


Starting time loop

Time = 1

DILUPBiCG:  Solving for Ux, Initial residual = 1, Final residual = 5.60823e-05, No Iterations 1
DILUPBiCG:  Solving for Uy, Initial residual = 1, Final residual = 0.0642524, No Iterations 1
DICPCG:  Solving for p, Initial residual = 1, Final residual = 0.00891467, No Iterations 174
time step continuity errors : sum local = 0.229869, global = 0.00302057, cumulative = 0.00302057
#0  Foam::error::printStack(Foam::Ostream&) in "/software/oss/OpenFOAM/OpenFOAM-1.6/lib/linux64GccDPOpt/libOpenFOAM.so"
#1  Foam::sigFpe::sigFpeHandler(int) in "/software/oss/OpenFOAM/OpenFOAM-1.6/lib/linux64GccDPOpt/libOpenFOAM.so"
#2  __restore_rt at sigaction.c:0
#3  void Foam::magSqr<Foam::SymmTensor<double>, Foam::fvPatchField, Foam::volMesh>(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>&, Foam::GeometricField<Foam::SymmTensor<double>, Foam::fvPatchField, Foam::volMesh> const&) in "/software/oss/OpenFOAM/OpenFOAM-1.6/lib/linux64GccDPOpt/libincompressibleRASModels.so"
#4  Foam::tmp<Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> > Foam::magSqr<Foam::SymmTensor<double>, Foam::fvPatchField, Foam::volMesh>(Foam::tmp<Foam::GeometricField<Foam::SymmTensor<double>, Foam::fvPatchField, Foam::volMesh> > const&) in "/software/oss/OpenFOAM/OpenFOAM-1.6/lib/linux64GccDPOpt/libincompressibleRASModels.so"
#5  Foam::incompressible::RASModels::LaunderSharmaKE::correct() in "/software/oss/OpenFOAM/OpenFOAM-1.6/lib/linux64GccDPOpt/libincompressibleRASModels.so"
#6  main in "/software/oss/OpenFOAM/OpenFOAM-1.6/applications/bin/linux64GccDPOpt/simpleFoam"
#7  __libc_start_main in "/lib64/libc.so.6"
#8  _start at /usr/src/packages/BUILD/glibc-2.9/csu/../sysdeps/x86_64/elf/start.S:116
./OpenFoamJob.sh: line 65: 24047 Floating point exceptionsimpleFoam
tail: cannot open `log' for reading: No such file or directory

la dernière ligne est logique puisque je n'ai pas fait de redirection. Donc ici il poursuit bien le script malgré l'erreur. Mais j'aimerais qu'il fasse la même chose tout en me créant le fichier log contenant soit l'erreur soit l'output standard

Hors ligne

#10 Le 24/04/2010, à 13:45

nesthib

Re : Bash : continuer malgré une erreur

essaye

ta_commande &>log

sinon je ne vois pas…
peut être le fait que tu lises et écrive dans le même fichier en même temps

ta_commande &>log2
mv log2 log

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

#11 Le 26/04/2010, à 14:28

Totor

Re : Bash : continuer malgré une erreur

Bonjour,

Allons ! nesthib, tu ne vois pas le problème ?
N'as-tu pas lu entièrement son log ???

2 dernières ligne du log a écrit :

./OpenFoamJob.sh: line 65: 24047 Floating point exceptionsimpleFoam
tail: cannot open `log' for reading: No such file or directory

On s'aperçoit alors que son script ne s'arrête pas suite à une erreur de la dite commande simpleFoam > log 2>&1 mais que cela provient d'un tail sur un fichier nommé log.

Etant donné que l'option e est repositionnée juste après cette commande, il est fort possible qu'il s'agisse de la ligne suivante ending=$(tail log | grep "End")

Maintenant, vérifions-le en rajoutant un touch :

set +e
simpleFoam >& log
set -e

## check if convergence was reached
touch log
ending=$(tail log | grep "End")

S'il le script continu, c'est que la ligne est bien identifiée comme étant à l'origine de cet arrêt.
(Note : simpleFoam >& log <=> simpleFoam >log 2>&1)

Ensuite, pourquoi ce fichier n'existe pas ? Je ne serais pas surpris qu'il y ait accès concurrent à un tel fichier (via la redirection et via le script simpleFoam). Cela expliquerait aussi pourquoi lorsque la redirection s'effectue vers /dev/null il n'y ait pas de problème. En effet, simpleFoam créant le fichier, le tail le trouve et ne plante pas.

Dernière modification par Totor (Le 26/04/2010, à 14:32)


-- Lucid Lynx --

Hors ligne

#12 Le 26/04/2010, à 19:49

nesthib

Re : Bash : continuer malgré une erreur

Totor a écrit :

Allons ! nesthib, tu ne vois pas le problème ?
N'as-tu pas lu entièrement son log ???

effectivement je n'avais pas tout lu en détail… j'étais resté sur la ligne "simpleFoam >& log"


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdnGMT-4

En ligne

Haut de page ↑