【问题标题】:Codeigniter 2.x cron issuesCodeigniter 2.x cron 问题
【发布时间】:2013-06-16 15:36:32
【问题描述】:

我需要在使用 cpanel 的共享主机上的 codeigniter 站点上设置 cron 作业。 cron 脚本在通过浏览器运行时可以工作,但是,我首先尝试使用 curl 和 wget 在 cron 中运行它,但这些都不起作用。最终我会想通过 php/cli 运行这些作业。

至于为什么curl和wget方法都不起作用,会不会和网站完全是SSL,而htaccess用于将所有http请求重写为https有关?老实说,我实际上并没有排除主机可能出于某种奇怪的原因禁用了 cron 的事实。

编辑:已经检查了主机并且 cron 运行良好!

我在这里阅读了一个关于 cron 和 CI CLI 的 article,它给出了这个例子;

/usr/local/bin/php -f /home/clinic/public_html/index.php cron foo

我已经尝试过这种方法,但我的控制器位于一个子目录中,例如 /controlers/utility/cron.php 并且我有 CI 设置不使用 index.php 那么我将如何以这种方式运行 cron 呢?

【问题讨论】:

  • 你是什么意思“我有 CI 设置不使用 index.php”?你的意思是它不存在于网址中?
  • @complex857 我的意思是配置设置为不在 URL 中使用 index.php 并在 htaccess 中设置 mod 重写。

标签: codeigniter https cron


【解决方案1】:

您可以像这样在 index.php 的参数中使用子目录来访问您想要的控制器和方法:

php index.php utility/cron method_in_controller

【讨论】:

  • 我就是这么想的,我试过了。我的主机查看了 cron 日志并发现了这些错误;消息:未定义的索引:REMOTE_ADDR;文件名:core/Input.php;行号:351;不确定那是什么意思。此外,该脚本不会在使用 curl 的 cron 下运行。然而,当通过浏览器运行时,脚本运行良好。
  • 这个错误似乎是当前stable中的codeigniter错误(或至少是未检查的错误条件)。当您来自 cli 请求时,您可以尝试获取回溯并且根本不请求 IP 地址。但是,如果您遇到错误,则意味着某些代码正在运行。这个 curl vs browser 对我来说很可疑,也许这不是 php 级别的错误。尝试在app/config/config.php 中将uri_protocol 配置值设置为auto
  • 在 curl http 下的另一个 CI 开发站点上的另一个 cron 作业(相同的 cPanel 帐户)工作正常。一定和https有关。
  • 我现在不确定发生了什么。上面给出参数的方法在我的环境中有效。恐怕除了调试之外别无他法。您可以尝试将 log_threshold 更改为 4,这将在 CI 引导期间为您提供大量的跟踪信息,也许这会有所帮助。
  • 我制作了一个简单的 curl 脚本,我可以通过浏览器访问该脚本,该脚本将使用 curl 模拟 cron 作业。 CURLINFO_HTTP_CODE 返回 0,我没有得到任何回报。感谢您的帮助 complex857。我会继续调试。
【解决方案2】:

好吧,这真的很尴尬。尽管多次检查脚本并确认它在浏览器中运行时有效,但我忽略了一个事实,即无意中粘贴了身份验证功能,并且当我在浏览器中登录时,我能够执行 cron 脚本,但这就是为什么当 cron 尝试运行它时它失败了。抱歉浪费您的时间 complex857,非常感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多