2013-10-02 10 views
14

mio script è il seguenteAggiunta di data e ora per il file di log in script bash

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, questo script viene eseguito ogni minuto. Controlla se un determinato programma è in esecuzione, se lo è, ottimo, in caso contrario, lo avvia.

Ora vorrei aggiungere i timestamp ogni volta che lo script viene eseguito in Debug.log se ha trovato ./program in esecuzione. Così sotto la linea then, ho aggiunto:

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

Questo comando non emette nulla a debug.log. Funziona comunque direttamente dalla riga di comando. Perché è così, e posso rimediare al problema?

+1

Non posso dirti perché, ma "data +" Ora:% C ">> Debug.log' sembrerebbe fare quello che vuoi, probabilmente in modo più trasparente e succinto. – tripleee

+0

Inoltre, 'grep thing | grep -v grep' di solito può essere rifattorizzato in qualcosa come 'grep [t] hing' dove l'idea è di usare una regex che non corrisponde a se stessa. – tripleee

+2

Nota che stai trasmettendo a 'Debug.log', mentre dovresti indicare il percorso completo di quel file. – fedorqui

risposta

15

Nota siete l'output a Debug.log, mentre è necessario indicare il pieno percorso di quel file: echo "Time: $(date)" >> /path/to/Debug.log.


In generale, ogni volta che si desidera aggiungere timestamp a un file di registro, è possibile utilizzare:

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

date si espanderà per qualcosa come Fri Sep 9 12:18:02 CEST 2016. In tal caso, si può scegliere di utilizzare alcuni date bandiere di avere una data più analizzabile:

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

O, meglio ancora, utilizzando il formato ISO 8601:

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

Tutti insieme:

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

possibile ragione è percorsi diversi per la data di terminale e sh: provare a utilizzare il percorso completo per la data che si utilizza direttamente da linea di comando, cioè $(/bin/date)

Problemi correlati