【问题标题】:Extra email from Cron Daemon when running an email list script运行电子邮件列表脚本时来自 Cron Daemon 的额外电子邮件
【发布时间】:2011-10-20 14:13:46
【问题描述】:

我有一个 PHP 脚本,它每两周向订阅者发送一次提醒。每次发送电子邮件时,它还会发送一封来自“Cron Daemon”的电子邮件。当我第一次编写脚本时,它没有发送这封电子邮件,但现在它发送了。我对此有几个问题。

电子邮件是这样写的:

Set-Cookie: PHPSESSID=((random letters and numbers here)); path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html
  1. 这封电子邮件是什么意思?
  2. 为什么要发送这封电子邮件?
  3. 有没有办法阻止脚本发送这封电子邮件?

【问题讨论】:

    标签: php email cron daemon


    【解决方案1】:

    Cron 读取执行命令的 stdout/stderr,如果写入了某些内容,则 cron 会发送一封电子邮件。

    我猜 php 可执行文件被编译为“cgi”或“fcgi”,所以默认情况下它会发出这些标头。

    要解决这个问题,您显然有三种可能的解决方案:

    • 使用 PHP 的“cli”版本
    • 将 stderr 和 stdout 重定向到 /dev/null(这意味着将 > /dev/null 2>&1 附加到您的 cron 命令中)。
    • 定义MAILTO=""(参见this page)。

    【讨论】:

    • 感谢重定向提示。即使我使用php -q 并认为这会使一切都沉默,但事实并非如此。它在 PHP 手册中被定义为抑制 HTTP 标头输出。附加 > /dev/null 2>&1 有效。
    【解决方案2】:

    我的猜测是您的 PHP 脚本正在向输出呈现一些内容。如果有任何内容被渲染,cron 会将其转发到默认管理员电子邮件。

    有两种解决方案:

    1) 修复您的 PHP 脚本,使其完全不输出任何内容。这有时比看起来更难,尤其是对于不平凡的脚本。

    2) 防止 cron 脚本永远有输出。这种方法的缺点是当脚本失败时您也不会收到通知。要停止输出,请使用以下内容:

    #Before
    * * * * * php /path/to/script
    #After
    * * * * * php /path/to/script > /dev/null 2>&1
    

    【讨论】:

    • 我精通 PHP,但并不总是熟悉一些技术性更强的对话(当您使用 Google 学习编程时会发生这种情况)。通过阻止脚本有任何输出,你是在谈论传递变量,还是更微妙的东西,比如标题信息?我应该发布一些我的脚本让你帮我找出需要修复的地方吗?
    • 无输出意味着没有写入命令行。有几件事可以提供帮助:不要将结束 %> 放在你的脚本上(很多 PHP 代码推荐),避免使用 echo 或类似的语句,并确保在 @987654324 之间没有呈现任何内容@ 和 <% 标签。此外,PHP 中的某些方法直接写入输出。如果你愿意,你可以发布。
    • 另外,鉴于您的消息内容,我认为上述 vstm 的更新很有可能是正确的答案。
    • 我通过 GoDaddy.com 完成了托管,这是我现在拥有的命令行: /web/cgi-bin/php5 "$HOME/html/email-events.php" 应该如何我改了吗?
    • 在末尾添加> /dev/null 2>&1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多