Batch php scripte nacheinander ausführen

Ravenstein

Lt. Commander
Registriert
Sep. 2010
Beiträge
1.239
hiho, ich habe nun mehrere php scrte die zusammen 1-2 stunden laufen (und nein das geht nicht zu optimieren)
wichtig bei diesen scripten ist ledeglich dass diese nacheinander ausgeführt werden, so dass das anforderungscript vor dem downloader script ausgeüfhrt wird und dann erst der parser etc.

wenn ich das ganze auf meiner shell starte hintereinander funktioniert dass, ich habe nur keinen plan wie ich die scripte hintereinander zum laufen bekomme, hintergrund ist der dass ich das einmal täglich als cronjob starten möchte, und dabei sichergehen muss das die scripte hintereiander ausgeführt werden.(die lafzeiten sind je nachdem wie viele dateien angefordert werden unterschiedlich lang)

ich benötige nur das eine angegebene logfile dass in eine datei ausgegeben werden soll, wie erreiche ich dass diese automatisch mit dem aktuellen datum erstellt wird?

der host ist ein ubunut server 16.04

meine scripte führe ich wie folgt (manuell) aus:
Code:
php -f /home/railgun/ARCHIV/Anfo/Anfo.php

php -f /home/railgun/ARCHIV/Download/DownLoad.php >/home/railgun/ARCHIV/Download/log.txt

php -f /home/railgun/ARCHIV/Parser/SParser1#1.php
php -f /home/railgun/ARCHIV/Parser/ZParser2#1.php
php -f /home/railgun/ARCHIV/Parser/IParser#1.php
php -f /home/railgun/ARCHIV/Parser/QParser#1.php
php -f /home/railgun/ARCHIV/Parser/PParser#1.php
php -f /home/railgun/ARCHIV/Parser/NParser#1.php
 
Zuletzt bearbeitet:
Du machst dir ein Shell-Script und trennst die einzelnen Befehle mit einem ";". Damit werden die Sachen unabhängig vom Erfolg der vorhergegangen ausgeführt.

Hängen die Skripte vom Erfolg des vorhergegangen Befehls ab, brauchst du ein "&&".
 
alles klar werde ich ausprobieren, wie mache ich das mit dem logfile? also dass dort das aktuelle datum geg. mit uhrzeit dransteht?
wie gebe ich fehlermeldungen (falls welche auftauchen) aller anderen scripte in einem logfile aus?
sry habe noch nie ein batch script erstellt :/

der inhalt von script.sh wäre dann so?
Code:
    #!/bin/bash
php -f /home/railgun/ARCHIV/Anfo/Anfo.php && 
php -f /home/railgun/ARCHIV/Download/DownLoad.php >/home/railgun/ARCHIV/Download/log.txt &&   
php -f /home/railgun/ARCHIV/Parser/SParser1#1.php ;
php -f /home/railgun/ARCHIV/Parser/ZParser2#1.php ;
php -f /home/railgun/ARCHIV/Parser/IParser#1.php ;
php -f /home/railgun/ARCHIV/Parser/QParser#1.php ;
php -f /home/railgun/ARCHIV/Parser/PParser#1.php ;
php -f /home/railgun/ARCHIV/Parser/NParser#1.php ;
 
Zuletzt bearbeitet:
Ja, du musst nur noch das Skript ausführbar machen. Wobei aber Zeile 5-9 immer ausgeführt werden, unabhängig davon, ob die davorgegangen Zeilen funktioniert haben! Wichtig ist: Du leitest nur die Ausagabe von Zeile 3 in eine Datei um, die Ausgabe von den anderen Zeilen zeigt er dir nur im Terminal an.

Leider kenne ich mich mit Shellscript nicht so gut aus, habe bisher nur ein Skript geschrieben, dass bei einem ext4 Filesystem das Erstelldatum ausliest, weil das so ohne weiteres nicht auslesbar ist. Wenn ich es aber richtig einschätze, wirst du nicht drum herum kommen, zu programmieren.

Ich würde wohl einfach in den PHP Skripten die Zeilenausgaben mit einem Zeitstempel versehen. Das erscheint mir am einfachstem.
 
okay ich habe dass jetzt wie oben ausprobiert, aktuelle bekomme ich eine fehlermeldung

Code:
-bash: /home/railgun/ARCHIV/Scheduler/script.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
 
Das liegt am falschen Zeilenumbruch. Speicher die script.sh mit LF anstatt mit CRLF ab. (Notepad.exe kann das nicht, musst VSCode/Atom/Notepad++ dafuer verwenden)
 
Und Anführungszeichen um die Dateinamen wegen dem # da drin.

Je nachdem wie die PHP-Scripts aufgebaut sind könnte man die auch in eine einzelne PHP einbinden lassen (require/require_once) und dann nur noch diese "Gesamt"-PHP-Datei ausführen.

Idealerweise wären dazu die einzelnen "Module" jeweils als Funktion implementiert. Dann würde man das einbinden und entsprechend in der "Gesamt-PHP" die Funktionen nacheinander aufrufen. Das gilt insbesondere, wenn die einzelnen PHP-Scripts nicht unabhängig voneinander ausgeführt werdne können (wegen Abhängigkeiten). Ansonsten könnte man sowas wie "Funktionen.php" haben, wo das alles drin definiert ist, und diese Datei von jedem Script einbinden und die zugehörige Funktion aufrufen lassen. Eventuelle Optimierbarkeit würde sich daraus dann mehr oder weniger automatisch ergeben (Stichwort Refactoring, wenn man über den fünften eigentlich identischen Codeblock gestolpert ist).

Muß man aber nicht notwendigerweise so machen. Einfach alles nacheinander auflisten und ein require/require_once davor reicht auch.

Dann würde das so oder so der Reihe nach ablaufen, dann nur noch ein Prozeß statt vieler davon.

Ob man dann die eine Ausgabe direkt von PHP aus per fopen/fwrite oder fprintf in eine Datei schreiben läßt oder das per Ausgabe und Umleitung in eine Datei macht, bleibt einem selber überlassen.


Wäre vielleicht einen Ticken leichter zu warten als den gesamten Code unstrukturiert überall verteilt zu haben, ohne irgendwas wiederverwenden zu können.
 
Die PHP Scripte funktionieren auch unabhängig voneinander, die Abhängigkeit besteht nur darin das es wenig Sinn macht etwas herunterzuladen wenn noch keine Liste (anfo) erstellt wurde.
Die PHP Scripte einzelnd kann man nicht bzw. Nur schwer in ein einzelnes Paket packen, zum einen wegen der Übersicht, zum anderen aufgrund von Abhängigkeiten innerhalb des Scripts.

Das bashing Script funktioniert mitlerweile, hatte nicht gedacht dass es heutzutage noch Formatierungsprobleme gibt. Danke für die Ausführungen diesbezüglich.
Nun muss ich Nurnoch herausfinden wie ich ein Datum als logfile Name definiere, ich mein man könnte dass als variable definieren hab dazu aber noch keine passende Ausführung gefunden
 
habe miterweile eine lösung, werde die daher hier kundtun, falls andere auf diesen thread kommen:
man füge am anfang des scripts ein:
Code:
heute=`date +%Y%m%d_%H%M%S`
die zeile heißt dann:
Code:
php -f /home/railgun/ARCHIV/Download/DownLoad.php >/home/railgun/ARCHIV/Download/log${heute}_A.txt
 

Ähnliche Themen

Zurück
Oben