2011-09-06 21 views
7

Sto cercando di fare un cron job con un sito costruito in CodeIgniter - Ho accesso alla funzione cron di CPanel qualcuno può suggerire il modo migliore per impostare un cron job usando CPanel?Cron jobs in codeigniter

Sto usando CodIgniter quindi non si può essere sicuri di come chiamare un controller all'interno di un cron job?

per esempio http://admin.com/sites/publish/

Come potrei accedere a questa funzione pubblicare entro i controllori siti utilizzando un processo di cron?

risposta

9

Il modo migliore è quello di chiamare da linea di comando nel processo di cron ...

php /path/to/index.php controller >> /dev/null 

È possibile eseguire i controller tramite la riga di comando in CI, vedi here.

+0

Questo sarebbe corretto per il mio scopo ne pensi? php /home/nomeutente/public_html/index.php/sites/publish >>/dev/null – Zabs

+2

+1 da parte mia, ma aggiungo solo in base alla domanda e al percorso dato che useresti 'php/path /to/index.php siti pubblica >>/dev/null' (renditi conto che hai appena dato un esempio ho pensato di chiarire) – simnom

+0

Ciao ancora - ho provato e il cron è in esecuzione ma ottengo il seguente messaggio di Cron Daemon spedito a me. NB Il controller è chiamato siti e la funzione è chiamata cron /bin/sh: /home/nomeutente/public_html/index.php/sites/publish: non una directory – Zabs

5

Per me il modo più semplice per farlo è usare cURL ed eseguendo l'URL nel cron:

curl http://admin.com/sites/publish/ 

Se è necessario garantire l'url, è possibile inviare i dati via posta utilizzando:

curl -X POST -d "apikey=yourapikey&another=variable" http://admin.com/sites/publish/ 

In questo modo non è necessario combattere con parametri php e diverse configurazioni.

+0

usando questo, esponi i tuoi cron job in tutto il mondo – Peacemoon

+0

Puoi proteggerli usando htpasswd. So che è più sicuro usare php invece di curl, ma per alcune cose stupide è più semplice in questo modo. – juanrossi

2

faccio questo modo, creare cartella cron

/application 
/cron 
    my_task.php 
/public 

sceneggiatura marca per ogni /cron/my_task.php job cron con contenuti

<? $_SERVER["SCRIPT_URL"] = "/controllerName/MethodName"; // you can set url in routes if you want 
    $_SERVER["HTTP_HOST"] = "your_site_address.com"; // without http://www 
    require(dirname(__FILE__) . "/../public/index.php"); // path to index.php 
?> 

regolatore make Cron come gli altri, ma aggiungere convalida IP in __construct

e finalmente correre come

1 10 * * * cd /path_to_site_folder/cron/ && usr/local/bin/php /path_to_site_folder/cron/my_task.php >> path_to_log/some.log 
1

Per cronjob provare questo per accedere regolatore riga di comando, le funzioni e params:

php index.php/controller/function/param1/param2/param3 etc 

o

php index.php controller function param1 param2 param3 etc