通过 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)

“第六”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分(直到换行符或“%”字符)将由 /bin/sh 或 cronfile 的 SHELL 变量中指定的 shell 执行。 命令中的“%”字符,除非用反斜杠(\)转义,否则将被更改为换行符,并且第一个 % 之后的所有数据将作为标准输入发送到命令。

强烈地推荐使用日期格式%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

相关内容