2

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

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

谢谢。

4

3 回答 3

1

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

您可以php_sapi_name()检查使用了哪种类型的接口(cron 作业的“cli”)。

请参阅php 文档

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

于 2013-06-06T11:45:54.887 回答
0

不会有问题的。

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

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

看看echo 是否等于 fputs( STDout )?. 这个问题有一些有价值的信息。

于 2013-06-06T11:54:22.147 回答
0

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

您通常应该编写您的 cron 作业/脚本,以便它不会产生任何输出,除非出现问题。这是一个哭狼的事情。如果你的 cron 工作总是很吵,你就不会在需要的时候注意。

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

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

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

可以测试终端是否存在,但我认为使用上述方法之一会更好。这种行为就不那么令人惊讶了。

于 2013-06-06T11:50:26.373 回答