【问题标题】:How to use Cron and Codeigniter/PHP to query a MySQL database?如何使用 Cron 和 Codeigniter/PHP 查询 MySQL 数据库?
【发布时间】:2012-03-21 17:50:11
【问题描述】:

我对代码(命令行和 php)的样子很感兴趣,您每分钟或每小时都会清点从 mysql 数据库获得的商品销售数量,并据此执行一些操作。我正在为 PHP 使用 CodeIgniter,我将我的控制器称为“cronControl”。

这是我目前所拥有的命令行部分(包括目录):

:htdocs TimPeterson$ * * * * * php index.php cronControl countSales

这是 cronControl php 部分:

class CronControl extends CI_Controller {

  function countSales(){
     $count=$this->db->query("SELECT stuff");
     //do->stuff->based on $count;
     $count="i counted 137 items";          
     file_put_contents("mylogfile.txt", $count);
  }
}

当我在 shell 中输入上述命令时,我得到:

-bash: 404.php: command not found

看起来它正在评估我的根目录(我的 404.php 页面所在的位置)中的所有 php 脚本,而不仅仅是 cronControl/countSales 控制器。请注意,如果您遗漏了 5 个星号,此 shell 命令会起作用并将 $count 打印到 mylogfile.txt。

有什么想法吗?

问题解决了!!!: 关键是在 crontab 文件中键入命令以包含星号,但在 shell 中不包含星号

所以在 crontab -e 中:

* * * * * /usr/bin/php /applications/xampp/htdocs/index.php cronControl countSales

而在 htdocs 中 $

    /usr/bin/php /applications/xampp/htdocs/index.php cronControl countSales

【问题讨论】:

  • 好的,在 Dan 的大力协助下,这个问题现在已经解决了。键入命令时的关键是在 crontab 文件中包含星号,但在 shell 中不包含星号,因此 crontab -e: * * * * * /usr/bin/php /applications/xampp/htdocs/index. php cronControl countSales 而在 htdocs $ /usr/bin/php /applications/xampp/htdocs/index.php cronControl countSales 感谢大家的帮助!蒂姆

标签: php mysql codeigniter command-line cron


【解决方案1】:

写入文件的快速方法是使用file_put_contents,例如

file_put_contents("/tmp/mylogfile.txt","Counted $count\n", FILE_APPEND );

【讨论】:

  • 谢谢菲尔,你能告诉我我的命令行语句是否正确吗?
  • 您的命令行看起来是正确的,但是您应该在通过删除 cron 频率规范将其放入 cron 之前从 shell 中对其进行测试。 (例如:您的 webroot 目录中的“php index.php cronControl countSales”)
  • 嗨,Phil,嗯,好的,我根据您的建议用新代码更新了我的问题,但仍然无法正常工作,请参见上文,谢谢
  • 你的 webroot 中是否存在 cron/ 目录,它是否可写?例如,“mkdir /var/www/cron”和“chmod 0777 /var/www/cron”。请注意,0777 所有人都可以写入,一旦您的软件投入生产,您需要将其更改为更具限制性的内容。
  • 嗨,Phil,是的,cron/ 目录在我的 web 根目录中,并且 id 执行了 chmod 777 以使其和 mylogfile.txt 可写。这并没有改变“没有文件或目录”错误消息,所以认为发生了一些奇怪的事情。
【解决方案2】:

CodeIgniter 有一个内置的日志机制来达到这个目的。

例如:

log_message('debug', 'Cron count is ' . $count);

更多信息请参见http://codeigniter.com/user_guide/general/errors.html

确保为调试启用日志记录(在您的 config.php 中设置)并且文件可以写入日志目录。

【讨论】:

  • 感谢 Dan,我最终感兴趣的不是记录消息,而是基于数据库查询创建发票。日志记录只是让我继续前进的一个简单示例。对于那个很抱歉。你对上面的 cronControl itemSales() 函数有什么想法吗?它仍然无法正常工作,并且不确定发生了什么,谢谢!
  • 当然。 cron 是否实际运行(例如,如果您从 Web 浏览器中点击脚本的地址)? crontab (* 0 * * ) 的语法将导致脚本在每天午夜运行。要测试脚本,最好每分钟将其更改为“ * * * *”,或者直接在 Web 浏览器中点击脚本的地址。
  • 嗨,Dan,是的,如果从 Web 浏览器而不是从命令行运行脚本,它可以工作。我认为我重写了我的 .htaccess 是相关的,所以我不需要浏览器中的 index.php。这意味着我只输入“localhost/cronControl/itemSales”而不是“localhost/index.php/cronControl/itemSales”。而在命令行中,当我只执行“php cronControl/itemSales”减去 index.php 部分时,它找不到控制器。虽然如果我执行 index.php 部分,它找不到 cron/ 目录和文件。想法?
  • 您可以尝试使用 WGET 运行 cron。 stackoverflow.com/questions/5766772/…
  • 嗨,丹,好的,运行 WGET 也不起作用。我认为我们正在处理与协议无关的路径问题。我们可以回到为什么 * * * * * php .... 不起作用,看起来它正在检查我的根目录中的所有 php 文件,而不仅仅是 cronControl,是 5 个星号还是 4 个?前面是否有正斜杠?谢谢!
【解决方案3】:

在 Dan 的大力协助下,这个问题现在得到了解决。键入命令时的关键是在 crontab 文件中包含星号,但在 shell 中不包含星号:

crontab -e: * * * * * /usr/bin/php /applications/xampp/htdocs/index.php cronControl countSales

而在 htdocs 中

$ /usr/bin/php /applications/xampp/htdocs/index.php cronControl countSales

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多