Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cronjob no ejecuta PHP

Estas en el tema de Cronjob no ejecuta PHP en el foro de PHP en Foros del Web. Hola compañeros, Estoy intentando programar mediante cronjob varios PHP pero pasa completamente de mí. Así está el cronjob, donde las rutas son correctas: * * ...
  #1 (permalink)  
Antiguo 05/03/2015, 12:37
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Cronjob no ejecuta PHP

Hola compañeros,

Estoy intentando programar mediante cronjob varios PHP pero pasa completamente de mí.

Así está el cronjob, donde las rutas son correctas:

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

Uno de estos PHP actualiza la base de datos con unas estadísticas que genera la web y además, actualiza el sitemap:

Código PHP:
<?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;
    }
}
¿Que estoy haciendo mal? ¿Puede que no sea suficiente hacer la llamada directamente desde el cronjob a esta clase Updates y deba de ser llamada por alguien?

Gracias!
  #2 (permalink)  
Antiguo 05/03/2015, 12:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cronjob no ejecuta PHP

¿Si ejecutas manualmente el script desde la linea de comandos funciona?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 05/03/2015, 13:10
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

Gracias por tu respuesta pareketrueke!

Vaya! No había probado a ejecutarlo en la linea de comandos...

Esto antes funcionaba en otro hosting. Ahora después de una migración intento averiguar como tenían estos cronjobs programados.

Por lo que veo está ocurriendo algún error de sintaxis...pero antes funcionaba con el código tal y como está:

unexpected T_OBJECT_OPERATOR on line 43 ----> $tmp = $this->db->select('id, catalogs_count, directories_count, requests_count')->get('categories')->result_array();

Acabo de probar a ejecutar todos los cronjobs que tengo que programar y todos muestra este unexpected T_OBJECT_OPERATOR...
  #4 (permalink)  
Antiguo 05/03/2015, 13:15
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

¿Puede que al devolver un objeto tenga que separar las llamadas?
  #5 (permalink)  
Antiguo 05/03/2015, 13:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cronjob no ejecuta PHP

Cita:
Iniciado por Goullak Ver Mensaje
¿Puede que al devolver un objeto tenga que separar las llamadas?
Eso depende mucho de la versión de PHP, la técnica de "chaining" que sería invocar métodos uno después del otro sólo está disponible en cierta versión de PHP para arriba.

¿Ya revisaste que tengas la versión correcta?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 05/03/2015, 14:18
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

Pues tenía la 5.2 (por defecto en 1&1), pero ya me he instalado la 5.5 y sigue dando el mismo error.

¿Con la 5.6 puede que el problema se solucione?

Última edición por Goullak; 05/03/2015 a las 14:25
  #7 (permalink)  
Antiguo 05/03/2015, 14:29
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

Vaya! Me acabo de dar cuenta que cuando desde putty ejecuto el script me muestra una versión distinta de PHP.

X-Powered-By: PHP/4.4.9

Veo que el problema puede ser ese...
  #8 (permalink)  
Antiguo 05/03/2015, 14:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Cronjob no ejecuta PHP

vaya tómale foto a la pantalla y guárdala para los anales de la historia
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 05/03/2015, 14:45
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

Como no soy egoista, quiero compartir este bonito recuerdo de lo que fue PHP en otra época :D

http://subefotos.com/ver/?7c3036327cbd1cf26a428933c7770039o.jpg

Gracias por la ayuda compañeros, espero poder solucionarlo cuando me cambien (si es que lo hacen) la versión PHP.
  #10 (permalink)  
Antiguo 06/03/2015, 01:57
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

Ya está solucionado el problema de PHP, sólo debía ejecutar el script en Putty de esta manera :

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


Ahora el problema está en la linea 3, en el "extends Controller". Esta clase estaba así anteriormente y no existía ningún inconveniente, pero es cierto que no hay una clase Controller de la que extender salvo en la ruta /system/libraries dentro del Controller.php y este a su vez, extiende de CI_Base...

¿Alguna idea?

Gracias!
  #11 (permalink)  
Antiguo 06/03/2015, 02:21
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

¿Puede que la ejecución del script no sea en el update.php que puse mas arriba sino que sea a uno anterior a este que llame a estos controladores?
  #12 (permalink)  
Antiguo 06/03/2015, 09:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cronjob no ejecuta PHP

¿Tienes el mensaje de error completo o hay que adivinar?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 06/03/2015, 09:51
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

Si claro, comenté el error un poquito mas arriba, aquí está exactamente:

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 />
Gracias por la ayuda pateketrueke.
  #14 (permalink)  
Antiguo 06/03/2015, 10:26
Avatar de Goullak  
Fecha de Ingreso: junio-2014
Mensajes: 32
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Cronjob no ejecuta PHP

He hecho la propuesta de aquí: http://stackoverflow.com/questions/4845806/codeigniter-2-0-fatal-error-class-controller-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.

Etiquetas: cronjob, ejecuta, 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 22:08.