我目前有一个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左表示:
要引用站点路径,请使用
/var/sites/s/website.com通往PHP 5.2的路径是/usr/bin/php,对于5.3是/usr/bin/php-5.3
技术员还说:
“要从CLI运行,您需要找到一种将这些参数输入脚本的方法,它们不能附加到命令中。”
虽然这不是命令的要点吗?
我还尝试通过"make请求“选项运行它,该选项将原始作业创建为:
0 6 * * * /usr/bin/wget -O /dev/null -o /dev/null http://www.speeddatemate.com/index.php/scrape/all_sites同样,这是行不通的。
我到处搜索,寻找一种方法来实现这个工作,并阅读各种帖子,并尝试了各种方法,但都没有用过。有人能帮忙吗?
发布于 2014-03-23 14:50:01
首先,除非您让cron作业在命令行上工作,否则不要麻烦地设置它。最后,您将混合不同的事情,产生大量不必要的调试可能性,这将进一步混淆您。
现在,你是说
我可以通过URL (
website.com/index.php/scrape/all_sites)使用浏览器成功地运行命令,但是脚本超时了
这可能是因为脚本需要超过30秒才能完成,因此在php中命中了php。检查这。
如果是这样的话,检查这并在这里和这里上回答,通过增加限制来解决这个问题。
一旦您有了脚本的工作版本,无论是通过浏览器还是通过命令行,您都可以继续调度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。
如果它仍然不起作用,请提供更多有关以下方面的信息:
apache,您通常可以在/var/log/apache2/error.log和/var/log/apache2/access.log找到它们。编辑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环境中有一些您的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.txt和cron_environment.txt对于您需要在cron环境中修改的任何未设置变量。
发布于 2014-03-24 11:35:57
首先,确保您的脚本在浏览器中按预期运行。如果是这样,那么您可以尝试从命令行运行它。让我们假设下面是您的控制器。
<?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擦伤all_sites
并将cron设置为
03 19 *** /usr/bin/php-5.3 /var/sites/s/website.com/public_html/index.php擦伤all_sites
如果需要传递参数,则传递如下所示的参数:
/usr/bin/php-5.3 /var/sites/s/website.com/public_html/index.php擦伤all_sites“工作正常”
享受吧!
您可以从代码点火器阅读关于通过CLI运行的参考文档。
https://stackoverflow.com/questions/22520809
复制相似问题