#1 Le 23/04/2010, à 21: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, à 00:28
- nesthib
Re : Bash : continuer malgré une erreur
{ta_commande 2>/dev/null ; } >log
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 24/04/2010, à 08: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é
Hors ligne
#4 Le 24/04/2010, à 08: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 24/04/2010, à 09: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...
Hors ligne
#6 Le 24/04/2010, à 10: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#7 Le 24/04/2010, à 10: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, à 11: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#9 Le 24/04/2010, à 11:28
- Malv0iD
Re : Bash : continuer malgré une erreur
Voici :
/*---------------------------------------------------------------------------*\
| ========= | |
| \\ / 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, à 12: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#11 Le 26/04/2010, à 13: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 ???
./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, à 13:32)
-- Lucid Lynx --
Hors ligne
#12 Le 26/04/2010, à 18:49
- nesthib
Re : Bash : continuer malgré une erreur
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne