|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Roman AdamskiInscription : décembre 2010 Messages : 20 ![]() |
Bonjour,
J'ai actuellement plusieurs scripts bash dont certains peuvent être assez long et tous possèdent de nombreux cas d'erreur qu'il est rarement possible de résoudre à l'intérieur même du script (permissions d'accès aux fichier, ...). J'ai donc rajouter la commande suivante au début de mes scripts pour logger les différentes erreurs dans un fichier : où $log représente un chemin vers mon fichier de log. Jusque là tout fonctionne. Mais comme j'ai plusieurs scripts tournant en cronjob toutes les nuits, j'aimerais pouvoir rajouter avant chaque entrée une chaine spécifique pour pouvoir identifier mon script et préciser qu'il s'agit d'une erreur. (En cas de problème, grep est mon ami pour parser le fichier de log et m'aider à trouver la cause du problème) En bonus j'aimerais également pouvoir rajouter la date et heure au moment d'effectuer le log (et pas au moment de d'initialiser le script sinon ce serait trop facile J'ai donc essayé de partir sur quelque chose comme : Code :
|
||
|
|
10
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
Comment est le script ?
si il utilises des fonctions tu peux rediriger ou tunneler les retours. Code :
|
||
|
|
10
|
|
|
#3 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Et en utilisant la commande "trap" ? Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
20
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 070 ![]() |
Bonjour,
je ne crois pas trap -l ne montre pas de signal ERR que trap pourrait intercepter(?). pour un debuggage ponctuel, on pourrait avoir une option (ou un test sur "$-" pour savoir s'il comporte "x") qui place set -x, initialise PS4 pour être adaptée à la sortie désirée, et rediriger la sortie d'erreur dans un fichier log... ? |
|
|
10
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Citation:
Normalement c'est pour du ksh, mais avec bash ça marche aussi...
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
10
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 070 ![]() |
évidemment...
si je ne lis pas le fichier de log, je ne verrai jamais que ça a fonctionné. ![]()
|
|
|
00
|
|
|
#8 | ||||
|
Membre à l'essai
![]() Roman AdamskiInscription : décembre 2010 Messages : 20 ![]() |
Bonsoir,
Merci pour vos nombreuses réponses. @frp31 : Il s'agit en réalité de plusieurs scripts bash tournant en cronjob chaque nuit. Parmi leurs différentes tâches il y a nettoyer les vieilles images du cache du serveur WEB (ce qui implique l'utilisation de la commande rm, ainsi qu'une connexion en base de donnée), et réaliser des fichiers de statistiques ce qui implique l'utilisation de commandes touch, de nombreuses commandes de formatages et de calcul et l'accès à une base de données également. Mettre des tests sur les valeurs de retour de chaque commande n'est pas une bonne idée car je pourrais rarement traiter l'erreur au sein même du script (exemple : une commande rm ne pouvant s'exécuter car après une mise à jour du site, les droits d'écriture pour le script ont disparu, un changement de la structure de la BDD et un oubli de mise à jour du script, etc.) et celà rendra mes scripts très rapidement illisible. L'utilisation de la commande exec me permet de rediriger stderr vers mon fichier de log pour toute la durée d'exécution de mon script, ce qui est très pratique puisque je n'ai plus besoin de tester chaque valeur de retour de chaque commande pour y implémenter mon écriture vers mon fichier de log. Je n'utilise pas de fonction actuellement dans mes scripts, mais celà peut être une bonne idée vu que je n'arrive pas à faire ce que je veux avec echo. Je viens donc de tester ce script : Code :
@zipe31 : Je n'ai actuellement pas de man page pour la commande trap sur ma debian (fraichement mise à jour) mais après test, c'est effectivement de çà dont j'aurais besoin. Il ne me reste plus qu'à lire la man page sur le net et trouver un équivalent pour sh (et non pas bash, dsl pour l'erreur de débutant En remplaçant le exec par la ligne que tu m'a fourni dans le mini-script précédent j'obtiens la sortie suivante : Code :
Merci beaucoup ! Je poste la solution complète avec sh dès que j'ai trouvé, il commence à ce faire un peu tard pour ce soir. P.S. : J'ai remarqué le thread "trucs et astuces" épingler en haut de cette section du forum. Ca me parait être une entrée intéressante. zipe31, as-tu le temps d'y rédiger un message ? Sinon je le ferais en citant ton pseudo. |
||||
|
|
00
|
|
|
#9 | |||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Citation:
Seul inconvénient le message d'erreur dans le fichier de log sera avant l'alerte Citation:
Citation:
, le principal est que l'information existe
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com