PHP-Skript automatisch in bestimeten Zeitabständen ausführen
Simon Wimmer
- php
0 fastix®0 Simon Wimmer1 fastix®0 eddi
0 Tobias Unger
0 Jeena Paradies
Ich möchte ein PHP-Skript automatisch in bestimeten Zeitabständen auf einem Server ausführen. Wie kann man das bewerkstelligen?
Moin!
Ich möchte ein PHP-Skript automatisch in bestimeten Zeitabständen auf einem Server ausführen. Wie kann man das bewerkstelligen?
Welche Möglichkeiten hast Du? Was für einen Server hast Du?
Wenn nicht:
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Ich möchte ein PHP-Skript automatisch in bestimeten Zeitabständen auf einem Server ausführen. Wie kann man das bewerkstelligen?
Welche Möglichkeiten hast Du? Was für einen Server hast Du?
- SSH-Zugang?
- crond?
Möchte das für verschiedene Projekte auf Servern mit unterschiedlichen Möglichkeiten haben. (Wenns geht)
Wenn nicht:
- Wie genau müssen die Zeitabstände denn eingehalten werden?
- Hast Du die Möglichkeit die "Seite" regelmäßig von zu Hause auf aufzurufen? (Flatrate, geeignetes OS?)
-Zeitabstände müssen nicht all zu genau sein. Ungefähr jede 1/4 Stunde.
-Nein. Soll ja jede 1/4 Stunde sein.
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
# 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)
?>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moi Moin.
Eine kleine Korrektur noch:
Notwendig: PHP als CLI (commando- line- interface- Version, nicht einzig als Modul)
0,15,30,45 * * * * /usr/bin/php -q /pfad/deinscript.php
#! /usr/bin/php -q
Der Autor rät Dir zwar zum CLI, geht aber in seinen Beispielen vom CGI-Binär aus. Dankenswerter Weise akzeptiert das CLI-Binär den Parameter "-q" schadlos.
Gruß aus Berlin!
eddi
Hi,
Möchte das für verschiedene Projekte auf Servern mit unterschiedlichen Möglichkeiten haben. (Wenns geht)
SSH oder Crond brauchst du schon wenn es der Server ohne fremde hilfe schaffen soll:
Crond ist die Standardmöglichkeit dafür (unter Linux).
Mit ssh könntest du in etwa so was machen:
while true; do
wget http://domain.tld/dir/file ODER php dir/file
sleep 900
done
Natürlich kannst du die Variante mit wget auch Scripte auf fremden Servern starten lassen!
Grüße aus Nürnberg,
Tobias
Hallo,
Ich möchte ein PHP-Skript automatisch in bestimeten Zeitabständen auf einem Server ausführen. Wie kann man das bewerkstelligen?
Zwei Linktipps:
Cronjobs von Zuhause aus mit cURL
Cronjob.de
Grüße
Jeena Paradies