ubuntuusers.de

PHP Datei über cron job ausführen

Status: Ungelöst | Ubuntu-Version: Xubuntu 23.04 (Lunar Lobster)
Antworten |

amp3s

Anmeldungsdatum:
26. Mai 2014

Beiträge: 240

Hallo,

also ich will für den Anfang mit crontab eine PHP Datei regelmäßig ausführen lassen. LAMP ist installiert, aber es sieht für mich so aus, dass es sozusagen nicht mit crontab zusammen funktioniert. In der PHP Datei, die aufgerufen werden soll, wird auch eine mysqli-Datenbankverbindung erstellt. Für mich sieht es halt gerade so aus, dass ich Apache installieren müsste, damit es geht. Da ich mich aber nicht besonders auskenne, würde ich das gerne vermeiden, ist ja nicht ohne Grund schon LAMP installiert.

In einem Beispiel, das ich gefunden habe, wird einer Zeile ein "/bin/sh" vorangestellt:

#*/1 * * * * /bin/sh /opt/lampp/htdocs/script.sh

Jetzt wünsche ich mir, dass es einen Parameter gibt, den ihr kennt und der dann funktioniert ☺

#*/1 * * * * /lamp/php/xy /opt/lampp/htdocs/index.php >> /opt/lampp/htdocs/log.txt 2>&1

Oder ihr wisst das ich Apache installieren muss, damit es geht, das würde mir auch weiterhelfen ☺

schollsky

Anmeldungsdatum:
3. Dezember 2012

Beiträge: 1729

Wohnort: Ruhrgebeat

Hallo amp3s,

LAMP steht für: Linux, Apache, MySQL, PHP - siehe z.B. auch: https://de.wikipedia.org/wiki/LAMP_(Softwarepaket)

Wie hast Du das denn installiert?

Sicher nicht über die Paketverwaltung:

https://packages.ubuntu.com/search?searchon=contents&keywords=lamp&mode=exactfilename&suite=lunar&arch=any

Also wirst Du wohl Apache brauchen...

Grüße

schollsky

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17620

Wohnort: Berlin

amp3s schrieb:

In einem Beispiel, das ich gefunden habe, wird einer Zeile ein "/bin/sh" vorangestellt:

#*/1 * * * * /bin/sh /opt/lampp/htdocs/script.sh

Wenn script.sh als ausführbar markiert ist, sollte es einfach gestartet werden. Das '/bin/sh' kann dann keinen Vorteil haben. Das brauchst Du nur, wenn das Script nicht als ausführbar markiert ist.

Jetzt wünsche ich mir, dass es einen Parameter gibt, den ihr kennt und der dann funktioniert ☺

#*/1 * * * * /lamp/php/xy /opt/lampp/htdocs/index.php >> /opt/lampp/htdocs/log.txt 2>&1

Also ich kenne einen Parameter, den Du löschen musst, wenn es funktionieren soll. Den führenden Hash # - der macht aus der Zeile einen Kommentar für crontab. Okay - ein Parameter ist das nicht, vielleicht ein Prefix.

Dem, was schollsky zu LAMP geschrieben hat, schließe ich mich aber auch an.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

also grundsätzlich brauchst du zum Ausführen einer PHP Datei "nur" den PHP Interpreter, siehe z.B. PHP (Abschnitt „Installation-fuer-Kommandozeilenprogrammierung“). Dann kannst du dann zwecks Ausführung deines Skripts aufrufen. In deinem Ausgangspost wird keine PHP-Datei aufgerufen, sondern ein Shellskript. Zumindest dem Aufruf und der Dateiendung nach.

Der Stand der Dinge zum periodischen Ausführen von Skripten sind systemd/Timer Units. Was aber an deinem eigentlichen Problem nichts ändert.

Gruß, noisefloor

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9702

Wohnort: Münster

amp3s schrieb:

[…] eine PHP Datei regelmäßig ausführen […] In einem Beispiel, das ich gefunden habe, wird einer Zeile ein "/bin/sh" vorangestellt:

#*/1 * * * * /bin/sh /opt/lampp/htdocs/script.sh

Es kommt auf das Skript an. Wenn dieses ein nicht selbst ausführbares Programm in der POSIX-Skriptsprache enthält, dann und nur dann ist ein Voranstellen von /bin/sh erforderlich, sonst kontraproduktiv. Da Du von PHP sprichst, ist es also vermutlich in Deinem Fall falsch. Ein ausführbares Skript sollte selbst in einer Shebang-Zeile den benötigten Interpreter angeben.

Auf jeden Fall musst Du das Kommentarzeichen in erster Spalte entfernen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

kB schrieb:

Es kommt auf das Skript an. Wenn dieses ein nicht selbst ausführbares Programm in der POSIX-Skriptsprache enthält, dann und nur dann ist ein Voranstellen von /bin/sh erforderlich, sonst kontraproduktiv. Da Du von PHP sprichst, ist es also vermutlich in Deinem Fall falsch. Ein ausführbares Skript sollte selbst in einer Shebang-Zeile den benötigten Interpreter angeben.

Mehr Informationen zu dem Thema "Shebang" gibt es im Wiki: Shebang für Shellskripte

Auf jeden Fall musst Du das Kommentarzeichen in erster Spalte entfernen.

+1

amp3s

(Themenstarter)

Anmeldungsdatum:
26. Mai 2014

Beiträge: 240

Ich war wohl etwas ungenau. Installiert ist XAMPP für Linux. Was ich zuerst mit LAMP in Verbindung gebracht habe, aber wie von schollsky geschrieben, steht LAMP ja eher für etwas anderes.

Also müsste ich eigentlich nochmal fragen, ob ihr seht, dass XAMPP für Linux reicht und ich nicht noch LAMP installieren müsste? Z.B. in dem man in die crontab, eine Variable setzt, die dazu führt, dass mit XAMPP für Linux interagiert wird!?

Wenn ich noch LAMP hätte, hätte ich ja PHP und MariaDB doppelt, was, wenn es überhaupt funktioniert, in der Praxis auch stören würde. Geht man dann z.B. zu http://localhost/phpmyadmin, gehört das zu XAMPP für Linux oder zu LAMP ? ☺

Wenn dieses XAMPP/LAMP Chaos nicht mehr wäre, würde es wohl auch mit systemd/Timer Units weitergehen, statt Cron.

Akedia

Anmeldungsdatum:
3. Januar 2018

Beiträge: 92

Chaos droht nur, wenn Du mit Werkzeugen hantierst, die Du nicht verstanden hast. Wenn Deine Beschreibung vollständig ist, benötigst Du eigentlich nur PHP und MariaDB.

Ob das aus XAMPP, LAMP oder einer direkten Installation von PHP und MariaDB stammt, ist letztendlich egal.

Der PHP-Interpreter muss dann nur auf der Kommandozeile bzw. im cron-Eintrag gefunden werden (Suchpfad bzw. Pfadangabe).

Der Link auf die PHP Installation für Kommandozeilenprogrammierung ist ja oben schon vorhanden ...

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

also in der Regel sollte es reichen, wenn man PHP und MariaDB aus den Paketquellen installiert, da muss man nicht wirklich auf was externes zurück greifen. Macht auch das aktualisieren einfacher. Bevor du das ggf. installierst solltest du aber dann vorher besser den XAMPP vollständig deinstallieren.

Gruß, noisefloor

amp3s

(Themenstarter)

Anmeldungsdatum:
26. Mai 2014

Beiträge: 240

Das Beispiel mit der script.sh habe ich nur gebracht, um aufzuzeigen und zu fragen, ob über einen Parameter oder Sheebang, eine Ausführung im "XAMPP für Linux"-Kontext möglich ist.

Mit einer manuellen Installation von PHP, mysql und mariadb, bin ich jetzt nicht weiter gekommen ... Aber mit LAMP ohne XAMPP würde es bestimmt gehen.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

was meinst du denn mit "XAMPP für Linux" Kontext? XAMPP kopiert ja auch "nur" Dateien nach einem Schema an einen bestimmten Ort und bringt einen gewissen Satz an Konfiguration mit. Mit deinem eigentlichen Problem, also dem periodischen Ausführen einer PHP-Skripts hat das eigentlich so rein gar nichts zu tun. Außer das du den Ort kennen solltest, wo der XAMPP Installer den PHP Interpreter hin kopiert hat.

Mit einer manuellen Installation von PHP, mysql und mariadb, bin ich jetzt nicht weiter gekommen

Heißt was genau? Welche Fehlermeldungen hast du bekommen? Und MySQL und MariaDB parallel installieren macht selten Sinn bzw. ist selten notwendig.

Gruß, noisefloor

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13204

amp3s, bitte trenne das dringend:

  • Hier können wir gerne die timerbasierte Ausführung disktutieren.

  • Für die Probleme mit der Installation (die natürlich zuerst gelöst werden müssen, bevor man überhaupt an die regelmäßige Ausführung denken kann) eröffne bitte ein Thema hier.

Möglicherweise wäre die Lektüre von https://en.wikipedia.org/wiki/XAMPP und XAMPP hilfreich.

Akedia

Anmeldungsdatum:
3. Januar 2018

Beiträge: 92

amp3s schrieb:

Mit einer manuellen Installation von PHP, mysql und mariadb, bin ich jetzt nicht weiter gekommen ... Aber mit LAMP ohne XAMPP würde es bestimmt gehen.

Wie kommst Du darauf?

Ein wesentlicher Unterschied zwischen LAMP und XAMPP ist das L (Linux) und X ("beliebiges" System). Das X ist in Deinem Fall Linux ...

Ehe Du alles parallel und drunter und drüber installierst, informier Dich, was Du wirklich brauchst.

Akedia schrieb:

... benötigst Du eigentlich nur PHP und MariaDB.

Ob das aus XAMPP, LAMP oder einer direkten Installation von PHP und MariaDB stammt, ist letztendlich egal.

Der PHP-Interpreter muss dann nur auf der Kommandozeile bzw. im cron-Eintrag gefunden werden (Suchpfad bzw. Pfadangabe).

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

Bevor es in die crontab wandert wäre es auch sinnvoll erst einmal zu testen ob es denn manuell aufgerufen funktioniert/das macht was gewünscht ist.

Antworten |