Moin!
Ich möchte ein PHP-Skript automatisch in bestimeten Zeitabständen auf einem Server ausführen. Wie kann man das bewerkstelligen?
Möchte das für verschiedene Projekte auf Servern mit unterschiedlichen Möglichkeiten haben. (Wenns geht)
-Zeitabstände müssen nicht all zu genau sein. Ungefähr jede 1/4 Stunde.
-Nein. Soll ja jede 1/4 Stunde sein.
Beste Variante:
Notwendig: PHP als CLI (commando- line- interface- Version, nicht einzig als Modul)
Notwendig: ssh oder telnet- Zugang (geht mit Trick auch via PHP)
Notwendig: laufender cron- Demon:
Du rufts nach Aufbau der ssh-Stitzung crontab -e auf, um Deine crontab zu editieren. Da wird in der Regel der vi gestartet. Es ist möglich, dass ein anderer Editor (emacs, joe...) Standardeditor auf dem System ist. Lies dessen Hilfe...
Durch Drücken eines "i" rufts Du den "Eingabemodus auf und tippst Deinen Wunsch ein:
user@maschine:/verz> crontab -e
0,15,30,45 * * * * /usr/bin/php -q /pfad/deinscript.php
Drücke jetzt [ESC]wq wenn alles so ist, so wie Du es wünschst. Damit wir gespeichert und beendet.
oder verlangst, dass das Skript direkt gestartet werden soll:
0,15,30,45 * * * * /pfad/deinscript.php
Im diesem Fall muss Dein Skript ausführbar (chmod 0755) sein und in der ersten(!) Zeile(!) eine shebang haben:
#! /usr/bin/php -q
Der oben genannte Pfad zu php ist beispielhaft und stimmt oft, jedoch nicht immer. Ein
user@maschine:/verz> whereis php
hilft hier weiter.
man 5 crontab und man 8 crontab liefert Dir die Hilfe zu den oben erforderlichen Eingaben, hier nur die Spalten, es handelt sich um seine "Leerzeichenseprierte Datei".
field allowed values
----- --------------
1. minute 0-59
[Leerzeichen]
2. hour 0-23
[Leerzeichen]
3. day of month 1-31
[Leerzeichen]
4. month 1-12 (or names, see below)
[Leerzeichen]
5. day of week 0-7 (0 or 7 is Sun, or use names)
[Leerzeichen]
6. Programm mit Optionen/Parametern
Überall, wo Du auch Zahlen eingeben kannst kannst Du auch Listen (1,3,5...) oder Bereiche eingeben (1-10) oder Listen von Bereichen (8-12,14-20).
Wenn Du alle diese Möglichkeiten nicht hast, dann musst es anders machen, nämlich bei einem mehr oder weniger zufällig erfolgenden Seitenabruf prüfen, ob Dein zuletzt innerhalb der 15 Minuten gelaufen ist und es dann starten. Das geht auch so, dass Du es vom anderen-Skript abhängst:
<?php
lesen von last_run.txt
wenn zu alt: sperren von last_run.txt
# schreiben des aktuellen timestamps nach last_run.txt
# entsperren von last_run.txt
# starten des Skriptes so, dass aktuelles Skript nicht darauf wartet:
$dummy=/usr/bin/php /pfad/zu/deinem/skript.php 1> /pfad/zu/deinem/logfile.txt 2> /pfad/zu/deinem/error.txt &
;
# Vorn un hintsen stehen wirklich Backticks (Umschalttaste plus die neben der Rückschritt-Taste)
ende
?>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development