2010-02-18 7 views
15

J'ai essayé la méthode suivante dans le passé:Comment exécuter un fichier CodeIgniter via CRON?

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

et de mettre cela dans un fichier dans le répertoire d'installation de CodeIgniter, appelant cron.php, puis en appelant via:

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

Si je tape l'URL de cron.php dans mon navigateur, il fonctionne parfaitement, mais chaque fois qu'il est lancé via CRON, j'obtiens une erreur 404. Mettre le code suivant dans la fonction show_404() de CodeIgniter

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

résultats à obtenir la sortie suivante envoyé par courrier électronique à moi:

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] 

Ici, j'ai [me] à la place de mon nom d'utilisateur réel.

Des idées?

Répondre

21

Le moyen le plus simple d'exécuter un cron via CodeIgniter est de rendre une URL cron disponible via votre application.

via Puis appeler wget

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

A l'intérieur du contrôleur, vous pouvez alors utiliser un journal pour assurer la Cron fonctionne pas trop souvent à savoir si les robots Google déclenchent par erreur.

Une deuxième méthode serait d'utiliser le lynx

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

Avec get w ai-je besoin de copier les asteriks comme bien? Dois-je copier la commande entière comme vous le donnez? –

+0

Génial, wget -O - -q -t 1 http://www.example.com/cron/run fonctionne! –

+0

Les astérisques se rapportent à l'exécution du cron. Je pense que ceux que j'ai cités devaient courir le cron toutes les heures. –

2

Il y a un article wiki sur la façon de fonctionner CodeIgniter sur la ligne de commande, mais il est plus utile pour les applications qui ont besoin d'interagir avec l'utilisateur via la borne (il y a aussi une bibliothèque pour ça)

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

L'un des avantages de cette façon de faire rapport à l'utilisation wget est que vous pouvez protéger votre code d'être exécuté par un utilisateur ou des bots avec:

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

Vous pouvez aussi ajouter --spider d'ignorer la réponse. Cela arrête la demande de synchronisation out:

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

Vous pouvez également vérifier cela: Cron job bootstrapper

Ceci est un simple fichier bootstrapper que vous pouvez utiliser pour exécuter directement vos contrôleurs de CodeIgniter de la ligne de commande . C'est une solution très simple et élégante pour utiliser les contrôleurs CI pour les tâches cron. Il prend également en charge la journalisation.

0

Utilisez php-cli au lieu de php
Ex:

/usr/bin/php-cli /home/CPANEL_USER/public_html/index.php cronJobs deleteNotifications 
Questions connexes