Добавление метки времени в файл журнала в сценарии 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

Через crontab этот скрипт запускается каждую минуту. Он проверяет, работает ли определенная программа, если это так, здорово, если нет, запускает ее.

Теперь я хотел бы добавлять метки времени каждый раз, когда скрипт запускается в Debug.log, если он нашел. /program для запуска. Так под then линией, я добавил:

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

Эта команда ничего не выводит в Debug.log. Он работает, однако, непосредственно из командной строки. Почему это так, и могу ли я исправить эту проблему?

Ответы

Ответ 1

Обратите внимание, что вы Debug.log в Debug.log, в то время как вы должны указать полный путь к этому файлу: echo "Time: $(date)" >>/path/to/Debug.log.


В общем, всякий раз, когда вы хотите добавить временную метку в файл журнала, вы можете использовать:

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

date будет расширяться до чего-то вроде Fri Sep 9 12:18:02 CEST 2016. В этом случае вы можете использовать некоторые флаги date для получения более синтаксической пары:

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

Или, еще лучше, используя формат ISO 8601:

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

Все вместе:

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

Ответ 2

Возможной причиной являются разные пути для даты в терминале и sh: попробуйте использовать полный путь к дате, которую вы используете непосредственно из командной строки, то есть $(/bin/date)