我目前有一个使用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/php
,5.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
再次这不起作用。
我一直在高低搜索,找到一种方法让这个工作并阅读各种帖子,尝试各种方法没有任何效果。有人可以帮忙吗?
答案 0 :(得分:3)
首先,除非您在命令行上工作,否则不要费心设置cron
作业。你最终会混合不同的东西并产生大量不必要的调试可能性,这会使你更加困惑。
现在,你说的是
我可以通过URL(
website.com/index.php/scrape/all_sites
)使用浏览器成功运行命令,但脚本超时
这可能是因为脚本需要超过30秒才能完成,因此会在max-execution-time
中点击php
。检查this。
如果是这种情况,请检查this并通过here和here进行解答,以通过提高限额来解决此问题。
通过浏览器或命令行获得脚本的工作版本后,您可以继续安排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 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.txt
和cron_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虚拟主机