Cronjobs richtig schreiben

In meinem Job als Systemadministrator bei einem ISP werde ich von unseren Kunden oft mit dem Wunsch nach einem Cronjob konfrontiert, dabei kann man sich viele Eigenschaften des Cron-Daemons zunutze machen und somit Arbeit sparen, ausserdem erhöhte Sicherheit erreichen.

Folgende Punkte sollte man beachten:

  1. in der crontab MAILTO setzen
  2. Ausgabe in den Scripten nur bei Fehlern, und nach STDERR
  3. nicht wget oder curl verwenden, sondern direkt z.B. php-cli
  4. keine Webserver-Variablen (in PHP z.B. $_SERVER) verwenden, sondern z.B. $HOME

Damit erreicht man einiges und spart sich Arbeit. Zu allererst muss man nicht selber eine E-Mail generieren, sondern kann es dem Cron-Daemon überlassen. Ausserdem wird, wenn man 2. beachtet, nur dann eine E-Mail erzeugt, wenn ein Fehler auftritt. Dadurch wird eine Gewöhnung vermieden (vorausgesetzt man behebt die Fehler die gemeldet werden konsequent) und sichergestellt, daß Fehler nicht im Grundrauschen untergehen.

Durch Berücksichtigung von 3. kann man die Skripte ausserhalb des per Webserver aufrufbaren document_root ablegen, und verhindert damit daß User der Webseite Cronjobs zu ihren Gunsten aufrufen. Ein Beispiel wäre eine Community, bei der jeder User am Tag eine Punktzahl bekommt. Ausserdem senkt es die Anzahl der für einen Cronjob gestarteten Prozesse immens. Bei Verwendung von z.B. curl sind es bis zu vier: cron startet eine Shell, diese startet Curl, der Request beschäftigt einen Webserverprozeß und eventuell einen PHP-Prozeß. Ohne diesen Umweg kann man es durch Setzen der Shell-Variablen auf einen reduzieren: PHP.

Allerdings muss man seinen Quellcode dann unabhängig von Variablen, die nur vom Webserver gesetzt werden, schreiben, wie z.B. das oben genannte $_SERVER.

Flattr this!

Leave a Reply