Foros del Web » Programando para Internet » PHP »

Problemas para ejecutar cronjob

Estas en el tema de Problemas para ejecutar cronjob en el foro de PHP en Foros del Web. 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. ...
  #1 (permalink)  
Antiguo 06/03/2015, 05:00
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 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!
  #2 (permalink)  
Antiguo 09/03/2015, 06:16
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problemas para ejecutar cronjob

Este es el error que está mostrando al ejecutar el php:

Código:
(uiserver):*********:~ > /usr/bin/php5.5 /kunden/homepages/45/d566577055/htdocs/web/_cronjobs/application/controllers/updates.php
X-Powered-By: PHP/5.5.20
Content-type: text/html

<br />
<b>Fatal error</b>:  Class 'Controller' not found in <b>/homepages/45/d566577055/htdocs/web/_cronjobs/application/controllers/updates.php</b> on line <b>3</b><br />
Ya he hecho esta posible solución pero sigue ocurriendo lo mismo, ya que la versión que utilizo es la 1.6.1: http://stackoverflow.com/questions/4...r-not-found-in

Comentan de sustituir Controller por CI_Controller por los cambios de la nueva versión de Codeigniter, pero lanza el mismo error que arriba pero indicando que no existe CI_Controller.

Gracias de antemano.

Etiquetas: cronjob, html, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:56.