Incluindo timestamp no arquivo de log via comando cronjob [duplicate]

1
    

Esta pergunta já tem uma resposta aqui:

    

Eu tento executar o comando git pull com a mensagem de saída de log para o arquivo a cada 5 minutos.

Mas eu tenho um erro como esse,

(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 da seguinte forma.

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

Como consertar isso?

    
por Erol Guzoğlu 07.01.2015 / 23:06

1 resposta

5

Note que, para alguns sistemas, um % é especial em um crontab: de crontab (5) no meu sistema

The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or a "%" character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. A "%" character in the command, unless escaped with a backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

Eu strongmente recomendo usar o formato de data %Y-%m-%d - além de ser padrão , classifica o mesmo lexicalmente e cronologicamente. Algumas implementações de strftime têm uma abreviação para ele: %F

Veja se o seu sistema tem um comando ts

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 você tenha que desmarcar o comando: (começando a ficar realmente feio)

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