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