2013-10-02 15 views
14

Mój scenariusz jest następującyDodawanie datownik do pliku dziennika w bash skryptu

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, ten skrypt jest uruchamiany co minutę. Sprawdza, czy dany program działa, jeśli jest, czy jest wielki, czy nie, uruchamia go.

Teraz chciałbym dodać znaczniki czasu za każdym razem, gdy skrypt uruchomi się w pliku Debug.log, jeśli znalazł ./program do uruchomienia. Więc pod linią then, dodałem:

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

Komenda ta nie robi nic debug.log wyjściowego. Działa jednak bezpośrednio z wiersza poleceń. Dlaczego tak jest i czy mogę zaradzić temu problemowi?

+1

Nie mogę powiedzieć dlaczego, ale 'date +" Czas:% C ">> Debug.log' wydaje się robić to, co chcesz, prawdopodobnie bardziej przejrzysto i zwięźle. – tripleee

+0

Także, 'grep rzecz | grep -v grep' może zwykle być refaktoryzowany do czegoś takiego jak 'grep [t] hing', gdzie pomysł polega na użyciu wyrażenia regularnego, które nie pasuje do siebie. – tripleee

+2

Zauważ, że wyświetlasz komunikat "Debug.log", a powinieneś wskazać pełną ścieżkę tego pliku. – fedorqui

Odpowiedz

15

Uwaga jesteś wyprowadzanie do Debug.log, natomiast należy wskazać pełny ścieżka tego pliku: echo "Time: $(date)" >> /path/to/Debug.log.


W ogóle, gdy chcesz dodać znacznik czasu w pliku dziennika, można użyć:

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

date rozszerzy się do czegoś jak Fri Sep 9 12:18:02 CEST 2016. W tym przypadku, może wolisz, aby korzystać z niektórych date flagi mieć więcej parsowalnym datę:

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

albo jeszcze lepiej, używając formatu na ISO 8601:

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

Wszystko razem:

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

Możliwa przyczyna jest różne ścieżki do tej pory w terminalu i SH: spróbuj użyć pełnej ścieżki do daty, która użyć bezpośrednio z linii poleceń, tzn $(/bin/date)