159 votes

Comment ajouter un horodatage au journal de bash script ?

J'ai un script qui s'exécute en permanence et que j'envoie dans un fichier journal :

script.sh >> /var/log/logfile

J'aimerais ajouter un horodatage avant chaque ligne qui est ajoutée au journal. Par exemple :

Sat Sep 10 21:33:06 UTC 2011 The server has booted up.  Hmmph.

Y a-t-il un jujitsu que je peux utiliser ?

2 votes

Voyez cette questin. serverfault.com/questions/80749/ . Une réponse en couple s'appliquerait ici.

0 votes

Pour une solution awk/gawk, voir : stackoverflow.com/questions/21564/

0 votes

Voici une implémentation complète de la journalisation pour bash : github.com/codeforester/base/blob/master/lib/stdlib.sh

127voto

nullDev Points 1778

Vous pouvez faire passer la sortie du script par une boucle qui préfixe la date et l'heure actuelles :

./script.sh | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >>/var/log/logfile

Si vous avez l'intention de l'utiliser souvent, il est facile de créer une fonction bash pour gérer la boucle :

adddate() {
    while IFS= read -r line; do
        printf '%s %s\n' "$(date)" "$line";
    done
}

./thisscript.sh | adddate >>/var/log/logfile
./thatscript.sh | adddate >>/var/log/logfile
./theotherscript.sh | adddate >>/var/log/logfile

0 votes

A quoi sert "IFS=" ?

3 votes

@Nils c'est une astuce pour prévenir read de couper les espaces blancs en début et en fin de ligne. Il définit l'IFS (Internal Field Separator de bash, qui est en fait une liste de caractères d'espacement) comme étant vide pour l'attribut read commandement.

2 votes

...et -r ignore le caractère d'échappement "\". Cela devrait vraiment fonctionner dans tous les cas - un excellent élément de script.

103voto

inazaruk Points 37760

Ver ts de l'Ubuntu moreutils paquet :

command | ts

Ou, si $command fait une mise en mémoire tampon automatique (nécessite expect-dev paquet) :

unbuffer command | ts

2 votes

FYI, unbuffer est dans le paquet "expect" sur Arch Linux.

0 votes

C'est génial, mais ce n'est pas disponible sur AL2.

57voto

user9517 Points 113163

があります。 date fournira cette information

date -u
Sat Sep 10 22:39:24 UTC 2011

pour que vous puissiez

echo $(date -u) "Some message or other"

C'est ce que vous vouliez ?

0 votes

L'utilisation de la commande date était un peu ce que j'avais en tête, mais je ne peux pas vraiment ajouter cela au script lui-même, donc ce que je cherche est un moyen de modifier cette ligne : "script.sh >> /var/log/logfile" pour ajouter la date.

0 votes

Dans ce cas, redirigez la sortie de votre script vers un tuyau nommé et ayez un démon écoutant la sortie qui prend la sortie du script et ajoute une date avant de l'écrire dans un fichier journal. Vous pouvez probablement modifier le fichier script J'ai écrit ici pour faire ça. Je le ferais bien parce que ça m'intéresse, mais il est tard au Royaume-Uni et je dois me lever tôt demain.

14voto

scls Points 237

Faites un config.sh fichier

#!/usr/bin/env bash
LOGFILE="/path/to/log.log"
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`

Lorsque vous avez besoin d'envoyer un fichier journal, utilisez

#!/usr/bin/env bash
source /path/to/config.sh

echo "$TIMESTAMP Say what you are doing" >> $LOGFILE

do_what_you_want >> $LOGFILE

Le fichier journal ressemblera à

2013-02-03 18:22:30 Say what you are doing

Il sera donc facile de trier par date

14 votes

Votre ''config.sh'' exécutera ''date'' exactement une fois, sur ''source .../config.sh''.

11voto

SparX Points 1914

Vous pouvez simplement echo la commande est envoyée dans le fichier journal, c'est-à-dire,

echo "`date -u` `./script.sh`" >> /var/log/logfile

Cela fonctionne vraiment :)

[sparx@E1]$ ./script.sh 
Hello Worldy
[sparx@E1]$ echo "`date -u` `./script.sh`" >> logfile.txt
[sparx@E1]$ cat logfile.txt 
Mon Sep 12 20:18:28 UTC 2011 Hello Worldy
[sparx@E1]$

0 votes

Qu'obtenez-vous lorsque vous exécutez la commande ?

17 votes

Cela met un timestamp avant la sortie entière de ''./script.sh'', pas avant chaque ligne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X