unix管道将一个命令的标准输出连接到另一个的标准输入。https://en.wikipedia.org/wiki/Pipeline_%28Unix%29
对于crontab运行的SF3.4项目,我有一些命令。
我有一个简单的adddate.sh
脚本,在每条消息行之前添加日期时间:
while read x; do
echo -n `date +%Y-%m-%d %H:%M:%S`;
echo -n " ";
echo $x;
done
运行cron如下:
* * * * * www-data bin/console the:command >> some.log 2>&1
命令抛出异常时导致some.log
:
12:12:25 ERROR [console] Error thrown while running command "the:command". Message: "lol" ["error" => Exception { …},"command" => "the:command","message" => "lol"] []
[Exception]
lol
所以在这种情况下一切都很好。记录异常。
像这样运行cron(使用adddate.sh
(:
* * * * * www-data bin/console the:command | adddate.sh >> some.log 2>&1
正确执行导致some.log
:
2018-01-01 12:24:01 Result of console line1
2018-01-01 12:24:01 Result of console line2
很好,这是意料之中的事!但是
命令抛出异常时的结果:nothing实际上什么都没有。甚至没有一行。系统cron日志中也没有错误。为什么在命令结果中添加"管道"脚本会停止记录异常消息?
异常消息似乎打印为标准错误。尝试在管道之前将stderr重定向到stdout:
* * * * * www-data bin/console the:command 2>&1 | adddate.sh >> some.log