C 程序没有得到预期的错误输出

Don't get expected error output with C program

我有一个由 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);
}

而且我在日志中看到没有打印“*”。所以它应该在错误输出上打印一些东西。

首先要做的是去掉我们在问题中看不到的东西,这是您的实际解析器。

暂时更改您的命令:

/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发送任何东西。


如果您没有获得两个具有正确输出的文件,那么您需要查看其他可能性,例如权限,或者围绕删除文件的疯狂进程运行在你不知情的情况下:-)