我尝试运行 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