我有一个由cron
任务调用的小脚本,它只启动一个程序并将标准输出重定向到一个文件中,错误输出重定向到另一个。问题是它适用于标准输出,但不适用于错误输出。
这是我的剧本:
#/bin/bash
echo "---------------------------------------------" \
>> /usr/src/parser_mail/bin/log/log
echo "Parsing du " `date` >> /usr/src/parser_mail/bin/log/log
echo "---------------------------------------------" \
>> /usr/src/parser_mail/bin/log/log
/usr/src/parser_mail/bin/parser \
>> /usr/src/parser_mail/bin/log/log \
2>> /usr/src/parser_mail/bin/log/error
经过几次测试后,我的解析器不会发出任何错误......
代码:
if (mysql_query(conn, sql))
{
fprintf(stderr, "\n#################################################\n");
fprintf(stderr, "ERREUR : %s\nInscription annulee pour cette horaire.\n",
mysql_error(conn));
fprintf(stderr, "#################################################\n");
}
else
{
printf("*");fflush(stdout);
}
我可以在日志中看到" *"没有打印。所以它应该在错误输出上打印一些东西。
答案 0 :(得分:1)
要做的第一件事就是摆脱我们在问题中可以看到的东西,这是你真正的解析器。
暂时更改您的命令:
/usr/src/parser_mail/bin/parser
为:
( echo xyzzy_output ; echo xyzzy_error >&2 )
并将重定向留在最后。您应该看到两行进入两个单独的文件。
如果他们这样做,那么您的解析器可能不会表现自己,例如不向stderr
发送任何内容,或者将两个句柄混合在一起,以便它们转到同一个地方 之前你的重定向开始了。
在这种情况下,您可能希望从命令行运行解析器,例如:
/usr/src/parser_mail/bin/parser >xyzzy_out 2>xyzzy_err
并查看每个文件中显示的内容。例如,解析器可能发送任何内容到stderr
。
如果您没有获得两个文件输出正确,那么您需要查看其他可能性,例如权限,或者在您不知情的情况下围绕删除文件的疯狂进程: - )