web-dev-qa-db-fra.com

Ajout d'un horodatage au fichier journal dans le script bash

Mon script est le suivant

if ps ax | grep -v grep | grep ./program > /dev/null
    then
        exit
    else
        echo "---------------------------------------------------" >> Debug.log
        echo "Starting program at:  $(date)" >> Debug.log
        ./program >> Debug.log 2>&1
fi
exit

Via crontab, ce script est exécuté toutes les minutes. Il vérifie si un certain programme est en cours d'exécution, s'il l'est, c'est parfait, sinon il le démarre.

Maintenant, je voudrais ajouter des horodatages à chaque fois que le script s'exécute dans Debug.log s'il trouve ./program en cours d'exécution. Donc, sous la ligne then, j'ai ajouté:

echo "Time: $(date)" >> Debug.log

Cette commande ne produit rien dans Debug.log. Il fonctionne cependant directement à partir de la ligne de commande. Pourquoi en est-il ainsi et puis-je remédier au problème?

18
Joshua

Notez que vous effectuez une sortie vers Debug.log, Tandis que vous devez indiquer le chemin complet de ce fichier: echo "Time: $(date)" >> /path/to/Debug.log.


En général, chaque fois que vous souhaitez ajouter un horodatage à un fichier journal, vous pouvez utiliser:

echo "Time: $(date). Some error info." >> /path/to/your/file.log

date s'étendra à quelque chose comme Fri Sep 9 12:18:02 CEST 2016. Dans ce cas, vous pouvez préférer utiliser certains drapeaux date pour avoir une date plus analysable:

$ date "+%FT%T"
2016-09-09T12:18:23

Ou, encore mieux, en utilisant le format ISO 8601 :

$ date -Iseconds
2016-09-09T12:18:23+0200

Tous ensemble:

echo "Time: $(date -Iseconds). Some error info." >> /path/to/your/file.log
24
fedorqui

La raison possible est des chemins d'accès différents pour la date dans le terminal et sh: essayez d'utiliser le chemin d'accès complet à la date que vous utilisez directement à partir de la ligne de commande, c'est-à-dire $(/bin/date)

3
Stan McGeek