2016-03-23 7 views
1

ich einen cron-Job wie dieses:Codeigniter Cron-Job nicht funktioniert

/usr/bin/php /var/www/website/public_html/index.php className methodName 

Wenn ich es im Terminal laufen läuft er, gibt aber nichts. Wenn ich einen falschen Methodennamen übergebe, wird er erfolgreich ausgeführt. Wenn ich einen falschen Klassennamen übergebe, gibt es einen Fehler der Webseite 404 aus.

Ich habe auch eine Routing, die

http://www.website.com/en/home/index 

könnte dies das Problem sein "en" in URL, zum Beispiel fügt?

meine Einstellungen von config.php sind:

$config['uri_protocol'] = 'AUTO'; 
$config['index_page'] = ''; 
+0

ich diese Lösung bin mit (wenn Sie einen cron-Job von einer cPanel-Umgebung ausführen müssen): http://phpstarter.net/2008/12/run -codeigniter-von-der-Kommandozeile -ssh/Lass mich wissen, wie es für dich funktioniert. Ich werde heute Abend eine vollständige Antwort schreiben. – Vickel

Antwort

4

die Schritte CodeIgniter 2.x für Cron-Jobs über CLI (Command Line Interface) vorzubereiten:

1. Platz: erstellen eine Kopie Ihre Wurzel index.php Datei und speichern sie sie in Ihrem Stamm als cli.php

2.: in Ihrem cli.php ersetzen 01.232.mit diesem Code:

#!/usr/local/bin/php 
<?php 

/* override normal limitations */ 
set_time_limit(0); 
ini_set('memory_limit', '256M'); 

/* deny direct call from web browser */ 
if (isset($_SERVER['REMOTE_ADDR'])) die('Permission denied.'); 

/* constants */ 
define('CMD', 1); 

/* manually set the URI path based on command line arguments... */ 
unset($argv[0]); /* except the first one */ 
$_SERVER['QUERY_STRING'] = $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = '/' . implode('/', $argv) . '/'; 

3. Platz: Ihre Cron-Job wie folgt auszuführen: Home-Verzeichnis

/usr/bin/php /var/www/website/public_html/cli.php controller method 

wo /var/www/website/public_html/ des Servers ist, den Standort Ihres index.php und cli.php.

Hinweise:

für CI 3.0 Sie die notwendigen Informationen here

Datenbank finden: Sie Ihre db Config-Einstellungen in Ihrem Controller-Methode zur Verfügung stellen müssen, wie der Cron-Job ausführt, nur die Methode des Controllers. Es weiß also nichts über irgendwelche Datenbankeinstellungen!

$config['hostname'] = "localhost"; 
$config['username'] = "username_admin"; 
$config['password'] = "password"; 
//etc.. 

$this->db = $this->load->database($config, TRUE); 

debug: nur einen Link in Ihrem HTML fügen Sie Ihre Controller-Methode wie laufen: index.php/controller/method (entfernen, sobald Sie Website ist live)

Quelle: sehr helpful

+1

hatte keine Ahnung, Sie können verhindern, dass das Skript über den Browser mit einem PHP-Befehl ausgeführt wird, danke! –

0

Sie kann auch Cron-Datei vom Terminal ohne cli.php ausführen. Es ist keine obligatorische Datei.

Ich bin Tagrunnig cron von meinem Server mit folgenden Syntax: /usr/bin/php /var/www/project1/index.php controllerName methodName >> /var/log/project1/logFile.txt

1

Ich denke, das ist der einfachste Weg ist codeigniter Arbeiten unter cron-Job zu bekommen,

Sie curl in Cron-Jobs verwenden kann, um ausführen oder führen Sie den codeigniter in cronjobs Beispiel:

* * * * * /usr/bin/curl https://www.domain.com/controller/function