#1 Le 04/08/2017, à 08:31
- Anard
Enregistrements de log et err
Bonjour,
Je cherche à ce qu'un script, lorsqu'il s'éxecute, enregistre au passage des fichiers script.log et script.err pour contrôler après coup que tout s'est bien passé.
Je voudrais que ce soit écrit directement dans le script pour n'avoir qu'à taper
./script.sh
Aussi, les sorties du terminal doivent apparaître pendant son éxecution car le script en question pose des questions à l'utilisateur.
J'ai trouvé ceci sur internet :
principale() {
... coeur du script
}
exec 3>&1
principale 3>script.log 2>&1 >&3 3>&- | tee script.err
exec 3>&-
Ca fonctionne très bien sauf que le terminal n'affiche que les erreurs au moment de l'éxecution. Ce qui fait que les questions à l'utilisateur et les echo ne s'affichent pas à l'écran.
Comme je ne comprends pas bien le code que j'ai trouvé, je ne vois pas comment faire pour que le terminal affiche en temps réel à la fois le log et les erreurs.
Pourriez-vous m'aider ? Merci.
Dernière modification par Anard (Le 04/08/2017, à 09:48)
"iMack" : GA-H97M-D3H, Intel i5 4460, 16Go DDR3, Intel HD4600, SSD 256+120 / Bootloader Clover - macOS Mojave / Gentoo-Xfce
"Portable" : HP Pavilion DV3500, Intel T6400, 4Go, HDD 500Go / Grub2 - Gentoo-Xfce
Hors ligne
#2 Le 04/08/2017, à 15:16
- kholo
Re : Enregistrements de log et err
bon, outre que rien ne se passe, il vaut mieux découper ce script et l'adapter à ta demande...
tente ça, tu y verras peut être plus clair
#!/bin/bash
function principale () {
# ... coeur du script
echo "bonjour, entrez votre nom"
read nom
echo "bonjour, une phrase vers >&3" >&3
echo "monde, une phrase vers >&2" >&2
echo "le un est lisible" >&1
echo "par défaut aussi..."
}
principale 3>"script.log" 2>"script.err"
echo "le nom est $nom"
exit 0
de mon côté j'utilise une journalisation avec une fonction :
déclaration du fichier de log
par exemple :
NOM_LOGICIEL="${0##*/}"
DIR_CONF="ou/tu/veux" # "$PWD" ou "$HOME/.config/${NOM_LOGICIEL}"...
FICHIER_LOG="${DIR_CONF}/${NOM_LOGICIEL}.log"
# ETAGE journal
function _journal () {
# on vide le log ou on le crée si il n'existe pas
> "${FICHIER_LOG}"
journal "ouverture - $(date)"
journal "\t\t\t\t\t------------------------"
}
function journal () {
echo -e "${@}" >> "${FICHIER_LOG}"
}
_journal
ou avec horodatage :
START=$(date +%s.%N)
function _journal () {
# cette partie pour conserver le journal
# if [ -f "${FICHIER_LOG}" ]
# then
# echo "..."
# else
# echo "Création du fichier de log : $FICHIER_LOG"
# touch "${FICHIER_LOG}"
# fi
> "${FICHIER_LOG}" # cette ligne pour initialiser le journal à chaque lancement
journal "ouverture - $(date)"
journal "\t\t\t\t\t------------------------"
}
function journal () {
local NOW=$(date +%s.%N)
local DIFF=$(echo "${NOW} - ${START}" | bc)
echo -e "[${DIFF}] ${@}" >> "${FICHIER_LOG}"
# echo -e "${@}" >> "${FICHIER_LOG}"
}
echo "ouverture du journal"
_journal
dans les deux cas j'appelle ma fonction avec du texte entre ""
journal "je met ce que je veux"
ou bien
journal "je met ce que je veux ${uneVariable} $($uneFonction "du texte...")"
Hors ligne
#3 Le 04/08/2017, à 21:14
- Watael
Re : Enregistrements de log et err
$ maFonc() { echo "stdOut" >&1; read -p "bla: " var; echo "$var";}
$ maFonc 1> >(tee std.log) 2> >(tee err.log >&2)
stdOut
bla: poipoi
$ poipoi
$ cat err.log
bla: $
$ cat std.log
stdOut
poipoi
mais l'affichage merdoie, c'est perturbant.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 05/08/2017, à 08:49
- Anard
Re : Enregistrements de log et err
mais l'affichage merdoie, c'est perturbant.
?? Ah bon ? Je n'ai pas remarqué que l'affichage merdoie. C'est exactement ce que je voulais faire et ça fonctionne nickel chez moi.
Sauf quelques lignes qui se trouvent écrites dans mon fichier .err alors que ce ne sont pas des erreurs. Je ne sais pas pourquoi, mais elles doivent être considérées comme tel par le Terminal.
Merci beaucoup en tout cas.
@ kholo : j'ai essayé ta proposition, maius ne suis pas parvenu à mes fins... Faut dire que je débute en bash et ne comprends pas tout
"iMack" : GA-H97M-D3H, Intel i5 4460, 16Go DDR3, Intel HD4600, SSD 256+120 / Bootloader Clover - macOS Mojave / Gentoo-Xfce
"Portable" : HP Pavilion DV3500, Intel T6400, 4Go, HDD 500Go / Grub2 - Gentoo-Xfce
Hors ligne
#5 Le 05/08/2017, à 09:24
- kholo
Re : Enregistrements de log et err
avant tout définir le fichier de log
NOM_LOGICIEL="${0##*/}" # récupère tout ce qui est après le dernier slash /
DIR_CONF="ou/tu/veux" # "$PWD" ou "$HOME/.config/${NOM_LOGICIEL}"...
FICHIER_LOG="${DIR_CONF}/${NOM_LOGICIEL}.log"
maintenant le script sait où se trouve FICHIER_LOG
cette première fonction crée le fichier journal ou le vide si il existe déjà
function _journal () {
# on vide le log ou on le crée si il n'existe pas
> "${FICHIER_LOG}"
journal "ouverture - $(date)"
journal "\t\t\t\t\t------------------------"
}
cette fonction journalise ; c'est elle qui envoie ce que je veux vers le fichier de log
function journal () {
echo -e "${@}" >> "${FICHIER_LOG}"
}
ensuite je lance la création ou le vidage du fichier qui est prêt à recevoir
_journal
maintenant, à chaque besoin, j'envoie une valeur dans mon fichier
journal "je met ce que je veux"
Hors ligne