Добавление временной метки в файл журнала с помощью команды cronjob

Добавление временной метки в файл журнала с помощью команды cronjob

Я пытаюсь запустить команду git pull с записью выходного сообщения в файл каждые 5 минут.

Но у меня возникла такая ошибка,

(root) CMD (cd /var/www/sites/ && git pull origin master | sed -e "s/^/$(date +\")
(CRON) error (grandchild #1111 failed with exit status 2)

Моя команда cronjob выглядит следующим образом.

*/5 * * * * cd /var/www/site/ && git pull origin master | sed -e "s/^/$(date +\"%d-%m-%y\ %T\"), /" >> /var/log/crond/site.log

Как это исправить?

решение1

Обратите внимание, что для некоторых систем a %является специальным параметром в crontab: из crontab(5) в моей системе

Поле «sixth» (остальная часть строки) определяет команду, которую нужно запустить. Вся командная часть строки, до символа новой строки или «%», будет выполнена /bin/sh или оболочкой, указанной в переменной SHELL cronfile. Символ «%» в команде, если он не экранирован обратной косой чертой (\), будет заменен на символы новой строки, а все данные после первого % будут отправлены команде в качестве стандартного ввода.

ясильнорекомендуем использовать формат даты %Y-%m-%d— он не толькостандарт, он сортирует одинаково лексически и хронологически. Некоторые реализации strftime имеют для этого сокращение:%F

Проверьте, есть ли в вашей системеtsкоманда

cd /dir && git pull origin master 2>&1 | ts "\%F \%T" >> /var/log/crond/site.log

Чтобы получить временные метки «в реальном времени», вам, возможно, придется отменить буферизацию команды: (это начинает становиться действительно некрасивым)

cd /dir && stdbuf -oL sh -c 'git pull origin master 2>&1' | ts "\%F \%T" >> /var/log/crond/site.log

Связанный контент