【问题标题】:How to create a simple Cron (CodeIgniter)如何创建一个简单的 Cron (CodeIgniter)
【发布时间】:2016-01-27 19:14:18
【问题描述】:

经过几次不同的尝试,我创建了一个 cron 任务,它每分钟运行以下文件 - 这个文件称为 cron.php:

    <?php
      echo file_get_contents('http://website.com/search/all');
    ?>

search 是我的控制器,all 是我的功能。

当像这样通过终端访问该文件时,该文件可以正常工作并符合预期:

 php /srv/users/serverpilot/apps/websitename/public/cron.php

但是,一旦我将它安排在 crontab -e 中,它就不能正确运行(如果有的话)并且不会显示任何错误。这是crontab -e的内容:

* * * * * php /srv/users/serverpilot/apps/brickmulesite/public/cron.php

当我查看我的 cron 日志 (grep cron /var/log/syslog) 时,我看到的是:

Jan 27 13:55:01 websitename CRON[22231]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 13:56:01 websitename CRON[22237]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 13:57:01 websitename CRON[22241]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 13:58:01 websitename CRON[22247]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 13:59:01 websitename CRON[22260]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:00:01 websitename CRON[22266]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:01:01 websitename CRON[22270]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:02:01 websitename CRON[22274]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:03:02 websitename CRON[22278]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:04:01 websitename CRON[22363]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:05:01 websitename CRON[22367]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:06:01 websitename CRON[22372]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:07:01 websitename CRON[22376]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)
Jan 27 14:08:01 websitename CRON[22383]: (root) CMD (php /srv/users/serverpilot/apps/websitename/public/cron.php)

看起来 cron 正在运行,但没有运行文件中的代码。我错过了什么?

我知道我应该能够使用以下命令运行它,但这也不起作用,所以我想简化问题:

php -f /srv/users/serverpilot/apps/websitename/public/index.php search all

【问题讨论】:

  • php -f /srv/users/serverpilot/apps/websitename/public/index.php search/all 如果您的 Search.php 控制器直接位于您的 controllers 文件夹中,则应该可以工作。您的error_log 中是否有任何错误?另外请记住,您可以使用127.0.0.1 而不是localhost 作为数据库主机。
  • 嗨@ArkoElsenaar - Search.php 文件直接位于controllers 文件夹内。 error_log 为空...
  • 从 cron 运行时,您希望在哪里看到输出?
  • 嗨@ScottSaunders - 该文件应该发送一封电子邮件并写入数据库。 cron 不会发生,但通过 CLI 以php /srv/users/serverpilot/apps/websitename/public/cron.php 访问时会发生

标签: php codeigniter cron


【解决方案1】:

[已解决]

您会注意到我正在使用 ServerPilot 作为我网站的一部分。他们的平台允许我选择我的网络应用程序应该运行的 php 版本。总之……

在这个网站上找到了修复: https://serverpilot.io/community/articles/how-to-use-the-php-cli.html

我需要做的是更改 cron 中的 PHP 调用,使其显示为:

* * * * * php5.6-sp /srv/users/serverpilot/apps/websitename/public/cron.php

注意php5.6-sp

我想这对于 ServerPilot 用户来说非常具体。

【讨论】:

    【解决方案2】:

    使用完整路径

    /usr/bin/php
    

    【讨论】:

    • 嗨@recycler - 当我从 CLI 运行以下命令时,它工作正常。我现在明白了为什么它不会来自 cron 内部的原因。 php /srv/users/serverpilot/apps/websitename/public/cron.php
    • 你从 bash 运行 php。 bash 有环境变量。 cron 确实在系统级别运行它并且没有系统变量。所以路径是未知的。 “php”将在根目录中执行。只有 bash 知道它在 /usr/bin/ 或 /bin/ 或 ...
    【解决方案3】:

    只需将其与 curl 一起使用

    卷曲“http://www.nameofdomain.com/controllername/functionname

    在命令文本框中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2012-05-16
      • 2016-02-23
      相关资源
      最近更新 更多