Adicionando carimbo de data/hora no arquivo de log por meio do comando cronjob

Adicionando carimbo de data/hora no arquivo de log por meio do comando cronjob

Tento executar o comando git pull com o registro da mensagem de saída no arquivo a cada 5 minutos.

Mas eu recebi um erro como este,

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

Meu comando cronjob é o seguinte.

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

Como posso consertar isso?

Responder1

Observe que para alguns sistemas a %é especial em um crontab: from crontab(5) no meu sistema

O campo "sexto" (o resto da linha) especifica o comando a ser executado. Toda a parte do comando da linha, até uma nova linha ou um caractere "%", será executada por /bin/sh ou pelo shell especificado na variável SHELL do arquivo cron. Um caractere "%" no comando, a menos que seja escapado com uma barra invertida (\), será alterado para caracteres de nova linha e todos os dados após o primeiro % serão enviados ao comando como entrada padrão.

EUfortementerecomendo usar o formato de data %Y-%m-%d- não só éum padrão, ele classifica da mesma forma lexical e cronologicamente. Algumas implementações do strftime possuem uma abreviação para isso:%F

Veja se o seu sistema possui umtscomando

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

Para obter carimbos de data e hora em "tempo real", talvez seja necessário remover o buffer do comando: (começando a ficar muito feio)

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

informação relacionada