Tipps und Hinweise

Weitere Tipps und Hinweise, nicht nur im Bezug zu Confixx.

Wohin werden die Ausgaben verschickt?

Wenn das Skript / Programm, das als Cronjob ausgeführt wird, Ausgaben über STDOUT oder STDERR tätigt, so fängt Cron diese auf. Nach Abschluss des Cronjobs werden alle Ausgaben in einer E-Mail verschickt, Empfänger ist der Benutzer, unter dessen Rechten der Cronjob ausgeführt wird.

Confixx legt allerdings eine Weiterleitung an, so dass die Nachricht an diejenige E-Mail-Adresse umgeleitet wird, die im Confixx hinterlegt ist. Dies ist üblicherweise auch die Adresse, an die wir die Rechnungen verschicken.

regelmäßiger Aufruf von PHP-Skripten

Sollen PHP-Skripte ausgeführt werden, so gibt es zwei Alternativen:

Diese beiden Methoden sind äquivalent - in beiden Fällen wird das Skript regelmäßig ausgeführt.

Aufruf über HTTP

Beispielabruf:

/usr/bin/wget -O/dev/null -q "http://www.example.com/cron.php" &>/dev/null

Erläuterungen:

Dieser Cronjob erzeugt somit weder im Fehler-, noch im Erfolgsfall eine E-Mail mit Ausgaben.

Aufruf direkt vom Server

Folgender Aufruf kann hier verwendet werden:

/usr/bin/php -f /var/www/web0/html/example.com/cron.php

Erläuterungen:

Dieser Aufruf ist unabhängig vom Zustand des Webservers. Auch existieren einige Beschränkungen, die auf PHP-Aufrufe per HTTP zutreffen, hier nicht.

Damit dies fehlerfrei funktioniert, sollte allerdings der Cronjob noch ergänzt werden.

Das PHP-Skript wird dabei ohne Pfadangabe aufgerufen. Dies hat insbesondere dann Auswirkungen, wenn andere Skripte über 'include()' oder 'require()' nachgeladen werden. Ist hier nur der relative Pfad angegeben ('./includes/db.php'), so klappt zwar ein Test per HTTP, der Cronjob schlägt allerdings fehl.

Um dieses Problem zu lösen, sollten entweder alle Pfade absolut über einen Basis-Pfad o.ä. angegeben werden:

<?php
define('BASEPATH', '/var/www/web0/html/example.com');
require_once(BASEPATH . '/includes/db.php');

Oder es wird vor allen anderen Aufrufen direkt am Anfang veranlasst, dass PHP ins 'richtige' Arbeitsverzeichnis wechselt:

<?php
chdir(dirname(__FILE__));
require_once('./includes/db.php');

Ein weitere Vorteil der zweiten Methode - im Gegensatz zur weit verbreiteten Methode, den Pfad zum PHP-Skript direkt im Crontab einzutragen: das PHP-Skript muss nicht ausführbar gemacht werden. Das PHP-Binary selbst wird durch Cron aufgerufen und erhält lediglich den Pfad zum PHP-Skript als Parameter übergeben.