从cron调用PHP脚本 - 回显会导致错误吗?

时间:2013-06-06 11:39:39

标签: php cron

我有一个PHP脚本,用于在网站上执行维护任务。 我每隔X小时使用一次cron来执行它,但如果网站管理员想要手动运行它,我也希望将它作为一个选项。为了使其管理员友好,最后它应该通过回显各种消息在浏览器中显示结果。

问题是,如果脚本在cron中运行时回显结果或是否会导致错误,这是否重要?它应该只在管理员执行时输出到浏览器吗?有没有办法告诉脚本何时在浏览器中执行?何时从cron执行?

感谢。

3 个答案:

答案 0 :(得分:1)

cron脚本的输出通常邮寄给服务器管理员。由于这可能很烦人,如果没有发生错误,通常不需要任何输出。

您可以php_sapi_name()检查使用了哪种类型的界面(" cli"用于cron作业)。

请参阅php docs

由于其他答案建议将输出重定向到/ dev / null,您应该记住,您无法知道是否发生了任何错误。你的cronjob可以停止工作,你很久不会知道......

答案 1 :(得分:0)

如果cron作业在stderr或stdout上有任何输出,那么cron会将电子邮件中的输出发送给cron作业用户,或者在cron文件中最后设置的MAILTO变量中给出的地址。

除非出现问题,否则通常应编写cron作业/脚本以使其不产生输出。这是一个哭狼的事情。如果你的cron工作经常吵闹,你就不会在需要的时候注意。

因此,有一些可能的方法,从命令行运行时仍然提供信息输出:

  1. 您可以向stdout写入信息性错误消息,并为真正需要引起注意的事项保留stderr。然后,您可以将您的cron作业规范管道标准输出到/ dev / null

  2. 您可以使用命令行选项打开或关闭输出。例如--verbose,或--quiet。

  3. 可以测试终端的存在,但我认为你最好采用上述方法之一。这种行为就不那么令人惊讶了。

答案 2 :(得分:0)

这不会有问题。

echo命令将使用php的标准输出。如果您在控制台中执行php脚本,echo将在控制台中打印其“结果”。

我相信crontab的标准输出可能取决于它的'unix分配。

does echo equal fputs( STDout )?。这个问题有一些有价值的信息。