2010-02-18 20 views
15

he probado el siguiente método en el pasado:¿Cómo ejecutar un archivo CodeIgniter a través de CRON?

<?php 
set_time_limit(0); 
$_SERVER['PATH_INFO'] = 'cron/controller/index'; 
$_SERVER['REQUEST_URI'] = 'cron/controller/index'; 
require_once('index.php'); 
?> 

y poner esto en un archivo en el directorio de instalación CodeIgniter, llamándolo cron.php, y luego que lo pida vía:

php /home/[username]/public_html/my_project/cron.php 

Si escribo la URL en cron.php en mi navegador funciona perfectamente, sin embargo cada vez que se ejecuta a través de CRON aparece un error 404. Poner el código siguiente en la función show_404() de CodeIgniter

function show_404($page = '') 
{ 
    print_r($_SERVER); 
    echo "\n\n"; 
    die ($page); 
} 

resultados en obtener la siguiente salida enviado por correo electrónico a mí:

Array 
(
    [SHELL] => /bin/sh 
    [MAILTO] => [email protected] 
    [USER] => [me] 
    [PATH] => /usr/bin:/bin 
    [PWD] => /home/[me] 
    [SHLVL] => 1 
    [HOME] => /home/[me] 
    [LOGNAME] => [me] 
    [_] => /usr/bin/php 
    [PHP_SELF] => 
    [REQUEST_TIME] => 1266479641 
    [argv] => Array 
     (
      [0] => /home/[me]/public_html/my_project/cron.php 
     ) 

    [argc] => 1 
    [PATH_INFO] => cron/controller/index 
    [REQUEST_URI] => cron/controllers/index 
) 


home/[me] 

Aquí he [yo] en lugar de mi nombre de usuario real.

¿Alguna idea?

Respuesta

21

La forma más sencilla de ejecutar un cron mediante CodeIgniter es hacer que una URL de cron esté disponible a través de su aplicación.

Luego llaman a través de wget

wget -O - -q -t 1 http://www.example.com/cron/run 

dentro del controlador a continuación, puede utilizar un registro para asegurar el cron no se ejecuta demasiado a menudo es decir, si los robots de Google disparan por error.

Un segundo método sería el uso de lince

/usr/local/bin/lynx -source http://www.example.com/cron/run 
+0

con Get w ¿Es necesario copiar los asteriscos como ¿bien? ¿Debo copiar todo el comando como lo das? –

+0

Impresionante, wget -O - -q -t 1 http://www.example.com/cron/run funciona! –

+0

Los asteriscos se relacionan con la ejecución del cron. Creo * que los que cité debían ejecutar el cron cada hora. –

2

Hay un artículo wiki sobre cómo ejecutar CodeIgniter en la línea de comandos, pero esto es más útil para aplicaciones que necesitan interactuar con el usuario a través del terminal (hay una biblioteca para eso también).

http://codeigniter.com/wiki/CI_on_the_command_line/

Uno de los beneficios de hacerlo de esta manera sobre el uso de wget es que se puede proteger el código de ser atropellado por los usuarios o los robots con:

if(!empty($_SERVER['HTTP_HOST'])) 
{ 
    show_error('Shove off hax0r!'); 
} 
5

también es posible que desee añadir --spider ignorar la respuesta. Esto evita que la solicitud de tiempo de espera:

wget -O - -q -t 1 --spider http://www.example.com/cron/run 
4

También puede ser que desee comprobar esto: Cron job bootstrapper

Este es un archivo de programa previo simple que se puede utilizar para ejecutar directamente los controladores de CodeIgniter desde la línea de comandos . Es una solución muy fácil y elegante para usar controladores CI para trabajos cron. También es compatible con el registro.

0

uso php-cli en lugar de php
Ex:

/usr/bin/php-cli /home/CPANEL_USER/public_html/index.php cronJobs deleteNotifications 
Cuestiones relacionadas