Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/03/2015, 05:00
Avatar de Goullak
Goullak
 
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 10 años, 6 meses
Puntos: 0
Problemas para ejecutar cronjob

Buenos días,

Estoy trabajando bajo una aplicación en Codeigniter y quiero programar que una vez al día se ejecuten mediante cronjobs una serie de scripts. Anteriormente esto funcionaba correctamente en otro hosting pero después de hacer una migración ha dejado de funcionar, ya que hay que volver a crear estos cronjobs.

Quiero que se ejecute todos los días /web/_cronjobs/application/controllers/updates.php. Este realiza una actualización en la base de datos de la estadística interna de la web y lo mas importante, una actualización del sitemap. Aquí dejo el código:

Código:
<?php
class Updates extends Controller 
{
	function Updates()
	{
		parent::Controller();
						
	//	$this->output->enable_profiler(TRUE);
	}
	

	function index($check=NULL)
	{
		$this->misc($check);
		$this->sitemaps($check);
	}
	
	
	
	/*
	 *
	 * actualizaciones varias
	 *
	 */
	function misc($check=NULL)
	{
		$carry = $check=='cron'
				? chr(13)
				: '<br />';
		
		echo 'Inicio misc: ',date('h:i:s') . $carry;
		

	//	$this->load->model('admin/category_model');
	//	$this->lang->load('admin/categories');

		
		/*
		 * 
		 * Actualizar los contadores de catalogs, directories y requests
		 *
		 */
		$tmp  = $this->db->select('id, catalogs_count, directories_count, requests_count')->get('categories')->result_array();
		foreach ($tmp as $row)
		{
			// actualizar contador catalogs
			$row['catalogs_count'] = $this->db->where('category_id', $row['id'])->count_all_results('catalogs_categories');
			
			// actualizar contador directories
			$row['directories_count'] = $this->db->where('category_id', $row['id'])->count_all_results('directories_categories');
			
			// actualizar contador requests
			$row['requests_count'] = $this->db->where('category_id', $row['id'])->count_all_results('requests_categories');
			
			// actualizar contador total
			$row['count'] = $row['catalogs_count']+$row['directories_count']+$row['requests_count'];

			$this->db->where('id', $row['id'])->update('categories', $row);
		}
		echo 'Categories: actualizar los contadores de catalogs, directories y requests.' . $carry;
		
		echo 'Fin: ',date('h:i:s') . $carry . $carry;
	}
	
	
	
	
	/*
	 *
	 * Generar SITEMAP
	 *
	 */
	 // *TODO: separar en varios sitemaps: catalogs, directories, requests, etc.
	function sitemaps($check=NULL)
	{
		$carry = $check=='cron'
				? chr(13)
				: '<br />';
		
		echo 'Inicio sitemaps: ',date('h:i:s') . $carry;
	
	
		$this->load->model('sitemap_model');
		
		
		$data = array();
		
		// Inicio
		array_push($data, array(
					'loc' 			=> '',
					'lastmod'		=> date('Y-m-d'),
					'changefreq' 	=> 'daily',
					'priority'		=> 1
				));
		
		
		// empresas
		$tmp = $this->sitemap_model->get_sitemap('directories'); // pasar como parametro qué datos obtener: catalogs, directories, requests...
		foreach ($tmp as $row)
		{
			array_push($data, array(
					'loc' 			=> get_friendly_url('directories', $row),
					'lastmod'		=> date('Y-m-d', strtotime($row['modified'])),
					'changefreq' 	=> 'daily',
					'priority'		=> 1
				));
		}
		unset($tmp);
	

		// productos
		$tmp = $this->sitemap_model->get_sitemap('catalogs');
		foreach ($tmp as $row)
		{
			array_push($data, array(
					'loc' 			=> get_friendly_url('catalogs', $row),
					'lastmod'		=> date('Y-m-d', strtotime($row['modified'])),
					'changefreq' 	=> 'daily',
					'priority'		=> 1
				));
		}
		unset($tmp);

			
		// trabajos
		$tmp = $this->sitemap_model->get_sitemap('requests');
		foreach ($tmp as $row)
		{
			array_push($data, array(
					'loc' 			=> get_friendly_url('requests', $row),
					'lastmod'		=> date('Y-m-d', strtotime($row['created'])),
					'changefreq' 	=> 'daily',
					'priority'		=> 1
				));
		}
		unset($tmp);
	
		
		// páginas estáticas
		$tmp = array(
			PAGES_FAQ_URL.'.html',
			PAGES_ABOUT_URL.'.html',
			PAGES_CONTACT_URL.'.html',
			PAGES_PRIVACY_URL.'.html',
			PAGES_COPYRIGHT_URL.'.html',
			PAGES_WORK_WITH_US_URL.'.html',			
		);
		foreach ($tmp as $row)
		{
			array_push($data, array(
					'loc' 			=> $row,
					'lastmod'		=> '',
					'changefreq' 	=> 'monthly',
					'priority'		=> 0.5
				));
		}
		unset($tmp);
	
		
		// crear sitemap
		$this->output->set_header("content-type: text/xml");
		$body = $this->load->view('sitemaps/index', array('list'=>$data), TRUE);
		
		// crear archivo XML
		$filename = '../sitemap.xml';
		if (file_exists($filename))
		{
			unlink($filename);
		}
		$ddf = fopen($filename, 'w');
		fwrite($ddf, $body);
		fclose($ddf);

		echo 'sitemap.xml creado.' . $carry;;
		
		echo 'Fin: ',date('h:i:s') . $carry . $carry;
	}
}
Estoy ejecutando esta sentencia desde PuTTY:

/usr/bin/php5.5 /kunden/homepages/45/*******/htdocs/web/_cronjobs/application/controllers/updates.php

Pero me muestra un error en la linea 3 indicando que no encuentra el Controller indicado en el extends. Creo que esto es porque intento ejecutar directamente el controlador. En este caso, ¿que es lo que debería de ejecutar para que realice la funcionalidad de este controlador?

La estructura de archivos de esta carpeta _cronjobs es la que suele aparecer en Codeigniter y es la siguiente:

config
controllers (donde se encuentra el updates.php y otros controladores que necesito también programar su ejecución)
errors
helpers
hooks
language
libraries
models
plugins
views

Gracias compañeros!