【问题标题】:Unix CRON JOB to send PHP Mail every minuteUnix CRON JOB 每分钟发送 PHP 邮件
【发布时间】:2014-04-06 08:48:25
【问题描述】:

我在 public_html 目录下有一个 php 邮件脚本 ma​​iler.php。当我通过 domain.com/mailer.php

直接访问它时效果很好

PHP 邮件脚本

<?php
$from = "mail@gmail.com"; // sender
    $subject = "Subject";
    $message = "Message of mail";
    $message = wordwrap($message, 70);
    mail("mail@gmail.com",$subject,$message,"From: $from\n");
?>

但我想使用 unix shell cron 作业每分钟执行一次这个脚本

我正在使用 Putty.exe Shell 终端(适用于 Windows)

我在 public_html/mailer.txt

中保存了以下 cron 代码
* * * * * /home/user/public_html/mailer.php

将 Shell 终端目录更改为 /public_html 并运行以下命令

crontab mailer.txt

现在我希望每分钟都能收到我上面定义的电子邮件 ID 中的邮件,但它不起作用。 请帮助我找出我在哪里做错了。

【问题讨论】:

  • 你应该这样测试:php /home/user/public_html/mailer.php
  • @gibberish 正如我上面提到的,当我直接运行 php 文件时,脚本工作正常。
  • @hsaka 您正在通过浏览器进行测试,测试 CLI 的正确方法是使用 php 命令
  • @meda 我将 mailer.txt 修改为 * * * * * php /home/user/public_html/mailer.php 并且工作正常。谢谢

标签: php shell unix cron crontab


【解决方案1】:

变化:

* * * * * /home/user/public_html/mailer.php

* * * * * php /home/user/public_html/mailer.php

【讨论】:

    【解决方案2】:

    您的文件根本无法执行。你可能想打电话给php

    * * * * * php /home/user/public_html/mailer.php
    

    ...或者为了安全起见:

    * * * * * /usr/bin/php /home/user/public_html/mailer.php
    

    .../usr/bin/php 应替换为您的 php 二进制文件的实际路径。

    此外,您可以将文件本身转换为 Linux 脚本:

    #!/usr/bin/php
    <?php
    $from = "mail@gmail.com"; // sender
        $subject = "Subject";
        $message = "Message of mail";
        $message = wordwrap($message, 70);
        mail("mail@gmail.com",$subject,$message,"From: $from\n");
    ?>
    

    ... 并告诉 Linux 它是一个可执行文件。例如,如果文件保存为/home/user/bin/mailer(无需将其保存到 Apache 文档根目录中):

    chmod +x /home/user/bin/mailer
    

    现在可以安排文件本身了:

    * * * * * /home/user/bin/mailer
    

    您可以在手册的Executing PHP files 部分找到更多详细信息。

    【讨论】:

      【解决方案3】:

      在你的 cron 文件中,你需要被执行:

      /usr/bin/wget localhost/mailer.php
      

      这应该会执行您在文件中的 PHP 代码。但是,我建议设置一个 .htaccess 文件,以便 localhost 是唯一可以执行该 PHP 文件的人。

      祝你好运!

      【讨论】:

      • 使用 HTTP 执行本地脚本是一种扩展的做法,但它真的很糟糕。
      • 为什么真的很糟糕,@Alvado?
      • 这意味着将您的本地程序暴露给全世界,并无缘无故地添加两个不必要的步骤(wget 和 Apache)。这相当于拿起电话与正在共进午餐的人交谈。
      • .htaccess 会阻止您的本地程序向全世界公开,但我明白您所说的添加两个不必要的步骤。
      猜你喜欢
      • 2019-09-27
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2015-10-01
      • 2013-09-06
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多