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?
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
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)