Mac*_*Mac 2 php cron codeigniter
我正在尝试为我的Codigniter应用程序设置cron作业,但是当我运行cron时,它会抛出memcached错误:
PHP致命错误:在第50行的/var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php中调用非对象的成员函数get()
致命错误:在第50行的/var/www/domain.com/www/dev/system/libraries/Cache/drivers/Cache_memcached.php中调用非对象的成员函数get()
虽然我不知道为什么这一直在抛出,我找不到我的cron作业文件中的任何错误,也不知道如何解决这个问题,因为我不知道这个被调用的地方,我查看了我的自动加载的库和助手,他们似乎没有错.
我也可以确认已安装memcached,如果我访问我的网站,memcached确实有效.
我试图抑制get()
在Cached_memcached.php
用@
,但这并没有帮助,因为没有显示输出(但应该是显示输出).
我为cron(user :)运行的命令www-data
是:
/usr/bin/php -q /var/www/domain.com/www/dev/index.php cron run cron
Run Code Online (Sandbox Code Playgroud)
我正在运行Ubuntu 11.10 x86_64.
这是我的cron文件:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Cron extends CI_Controller {
var $current_cron_tasks = array('cron');
public function run($mode)
{
if($this->input->is_cli_request())
{
if(isset($mode) || !empty($mode))
{
if(in_array($mode, $this->current_cron_tasks))
{
$this->benchmark->mark('cron_start');
if($mode == 'cron')
{
if($this->cache->memcached->get('currency_cache'))
{
if($this->cache->memcached->delete('currency_cache'))
{
$this->load->library('convert');
$this->convert->get_cache(true);
}
}
echo $mode . ' executed successfully';
}
$this->benchmark->mark('cron_end');
$elapsed_time = $this->benchmark->elapsed_time('cron_start', 'cron_end');
echo $elapsed_time;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先要尝试的是确定是否支持memcached.
var_dump($this->cache->memcached->is_supported());
Run Code Online (Sandbox Code Playgroud)
要确保的第二件事是你有一个memcached.php
文件application/config/
它应包含具有以下键的memcached主机的多维数组:
host
port
weight
以下示例定义了两个服务器.数组键server_1
和server_2
是不相关的,不过,可以命名.
$config = array(
'server_1' => array(
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 1
),
'server_2' => array(
'host' => '127.0.0.2',
'port' => 11211,
'weight' => 1
)
);
Run Code Online (Sandbox Code Playgroud)
接下来我要检查的是检查控制器是否可以在Web浏览器中运行而不是CLI,或者是否出现相同的错误.
此外,显式加载memcached驱动程序可能值得尝试.以下将加载memcached
驱动程序,并在file
缓存驱动程序上调用失败.
$this->load->driver('cache', array('adapter' => 'memcached', 'backup' => 'file'));
Run Code Online (Sandbox Code Playgroud)
使用此方法可以调用$this->cache->get();
以考虑回退.
要检查的另一件事是你没有为web和CLI使用单独的php.ini文件.
在Ubuntu它位于
/etc/php5/cli/php.ini
Run Code Online (Sandbox Code Playgroud)
并且您应该确保存在以下行,而不是注释掉
extension=memcache.so
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建/etc/php5/cond.d/memcache.ini
具有相同内容的文件.
更改配置文件后,请不要忘记重新启动服务.
您可以通过执行以下命令检查memcached是否已使用CLI确实正确设置
php -i | grep memcache
归档时间: |
|
查看次数: |
2772 次 |
最近记录: |