Codeigniter CLI命令与Tsohost无法正常工作

时间:2014-03-20 00:05:43

标签: php codeigniter cron crontab

我目前有一个使用codeigniter构建的PHP网站,我遇到了CLI和cron作业的问题。

设置CLI,以便在服务器上的/application/controllers/scrape中找到运行脚本的控制器(通过ftp查看)这将是/public_html/application/controllers/scrape,运行的函数被调用all_sites

我托管了TSOhost并且可以通过URL(website.com/index.php/scrape/all_sites)使用浏览器成功运行命令,但是脚本超时,因此需要使用cron作业来运行脚本。

到目前为止,我尝试让脚本每天运行时,在TSOhost控制面板的高级模式下尝试了以下原始cron命令:

TSOhost技术人员对此进行了设置

03 19 * * * /usr/bin/php-5.3 /var/sites/s/website.com/public_html/application/controllers/scrape.php (didn't work)
0  6  * * * /usr/bin/wget -O /dev/null -o /dev/null http://www.speeddatemate.com/index.php/scrape/all_sites
0  6  * * * /usr/bin/php-5.3 /var/sites/s/speeddatemate.com/public_html/application/controllers/scrape/all_sites
03 19 * * * /usr/bin/php-5.3 /var/sites/s/speeddatemate.com/public_html/application/controllers/scrape.php
03 19 * * * /usr/bin/php-5.3 /var/sites/s/speeddatemate.com/public_html/application/controllers/scrape/all_sites
10 18 * * * /usr/bin/php-5.3 /var/sites/s/speeddatemate.com/public_html/index.php scrape all_sites
TSO主持人表示:

  

要引用您的网站路径,请使用/var/sites/s/website.com

     

PHP 5.2的路径为/usr/bin/php5.3的路径为/usr/bin/php-5.3

技术人员还说:

  

“要从CLI运行,您需要找到一种方法将这些参数放入脚本中,它们不能附加到命令中。”

虽然这不是指挥点吗?

我也尝试通过“make a http request”选项运行它,该选项创建原始作业:

0 6 * * * /usr/bin/wget -O /dev/null -o /dev/null http://www.speeddatemate.com/index.php/scrape/all_sites

再次这不起作用。

我一直在高低搜索,找到一种方法让这个工作并阅读各种帖子,尝试各种方法没有任何效果。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

首先,除非您在命令行上工作,否则不要费心设置cron作业。你最终会混合不同的东西并产生大量不必要的调试可能性,这会使你更加困惑。


现在,你说的是

  

我可以通过URL(website.com/index.php/scrape/all_sites)使用浏览器成功运行命令,但脚本超时

这可能是因为脚本需要超过30秒才能完成,因此会在max-execution-time中点击php。检查this

如果是这种情况,请检查this并通过herehere进行解答,以通过提高限额来解决此问题。

通过浏览器或命令行获得脚本的工作版本后,您可以继续安排cron作业,就像已经由TSOhost技术支持共享的那样。

03 19 * * * /usr/bin/php-5.3 /var/sites/s/website.com/public_html/application/controllers/scrape.php (didn't work)
0  6  * * * /usr/bin/wget -O /dev/null -o /dev/null http://www.speeddatemate.com/index.php/scrape/all_sites

再次,只有在其他部分工作后才设置crons。


如果仍然无效,请提供以下信息:

  1. 脚本到底是做什么用的?它下载了什么,是否备份了什么;用它做的任何事情来更新问题。
  2. 它需要什么参数?你是怎么通过网址传递的?
  3. 日志说什么?假设您的网络服务器为apache,您通常可以在/var/log/apache2/error.log/var/log/apache2/access.log找到它们。

  4. 编辑1

    OP在评论中说php index.php scrape all_sites对他有用。

    假设从他的应用的根目录开始工作,index.php的路径可以被称为/var/sites/s/website.com/public_html/application/index.php,那么尝试这个cron作业

    03 19 * * * cd /var/sites/s/website.com/public_html/application/ && /usr/bin/php-5.3 index.php scrape all_sites
    

    如果可能,请将其安排在接近当前时间的时间,而不是19:03的固定作业

    如果这仍然不起作用,并且假设已经处理了max-execution-time,则问题可能在于您的某个环境变量 - 您的cli shell环境中有一些缺少的变量cron环境。

    根据我的经验,我发现PATH变量导致最多的麻烦,所以在你的shell上运行echo $PATH,如果你获得的路径值是/some/path:/some/other/path:/more/path/values,那么运行你的cron像

    这样的工作
    03 19 * * * export PATH="/some/path:/some/other/path:/more/path/values" && cd /var/sites/s/website.com/public_html/application/ && /usr/bin/php-5.3 index.php scrape all_sites
    

    如果这不成功,请检查下一步的所有环境变量。

    使用普通shell中的printenv > ~/shell_environment.txt来获取shell中设置的所有环境变量。然后使用以下cron条目* * * * * printenv > ~/cron_environment.txt从cron环境中获取变量。

    比较两个 - shell_environment.txtcron_environment.txt,了解您需要在cron环境中修补的任何未设置变量。

答案 1 :(得分:0)

首先确保您的脚本按照预期从浏览器运行。如果是这样,那么您可以尝试从命令行运行它。让我们假设以下是你的控制器。

<?php
class Scrape extends CI_Controller {

    public function all_sites($some_parameter = 'working')
    {
        echo "Its {$some_parameter}!".PHP_EOL;
    }
}
?>

根据您提供的运行命令的信息,您可以运行

  

/usr/bin/php-5.3 /var/sites/s/website.com/public_html/index.php scrape all_sites

将cron设为

  

03 19 * * * /usr/bin/php-5.3 /var/sites/s/website.com/public_html/index.php scrape all_sites

如果需要传递参数,请传递参数:

  

/usr/bin/php-5.3 /var/sites/s/website.com/public_html/index.php scrape all_sites&#34;工作正常&#34;

享受!

您可以从codeigniter here

阅读有关通过CLI运行的参考文档

答案 2 :(得分:-1)

https://www.facebook.com/tsohostcouponcodes/

答案就在这里,寻找便宜的tsohost虚拟主机