PHP - Problemas para crear cronjob (tarea programable)

 
Vista:

Problemas para crear cronjob (tarea programable)

Publicado por Albertio (2 intervenciones) el 06/03/2015 11:52:20
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<?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!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas para crear cronjob (tarea programable)

Publicado por MMan (59 intervenciones) el 06/03/2015 15:11:01
ni idea de CI.. pero segun otros foros...

tal vez tu hosting actual usa una version actualizada de CI...

dicen que de la version 1 a la 2...han habido algunos cambios

y debes modificar tu codigo ....

1
2
3
4
5
Controller to CI_Controller
 
And
 
Parent::controller () to parent::__construct ()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas para crear cronjob (tarea programable)

Publicado por Albertio (2 intervenciones) el 06/03/2015 17:00:09
Gracias por responder MMan,

Muestra el mismo error en la linea 3, que no encuentra la clase CI_controller:

1
2
3
4
5
6
(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 'CI_Controller' not found in <b>/homepages/45/d566577055/htdocs/web/_cronjobs/application/controllers/updates.php</b> on line <b>3</b><br />
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar