PHP best practice externe batch starten (cakephp 2.x)

schumischumi

Lt. Commander
Registriert
Dez. 2011
Beiträge
1.114
hallo zusammen,

ich muss externe batches oder programme über ein php webinterface auf einem windows (web)server ausführen.
generell funktioniert das ja über exec oder system und man sollte nach möglichkeit escapeshellcmd fürs sanitize hernehmen.

jetzt würde mich noch interessieren, was man zusätzlich noch beachten sollte bzw. wie man am schlausten vorgeht (sicherheit, stabilität, performance usw.). eine best practice halt.
evtl. gibts auch ne schönere lösung mit nem framework. ich verwende z.z cakephp 2.x.

als anwendungsbeispiel:
ein user einer gruppe soll über einen button im webinterface eine batch anstarten, die einen neuen user im AD anlegt. als variable parameter werden der neue username und evtl. n passwort übergeben.
die batch liegt gesondert vor und kann halt mit den parametern umgehen.


thx für euren input schon vorab.
 
Ich würd da anders herangehen. Lass auf dem Server einen Cronjob (wie heißt der Mist bei Windows?) laufen, der regelmäßig in ner Datenbank nach ner Todo-Liste sucht. Dein Webinterface füllt nur die Warteschlange in der Datenbank.
Auf die Weise blockiert das Interface nicht, wenn der Server für die Aufgabe etwas länger braucht. Außerdem: Rechteproblematik. Dein Webinterface sollte ja ganz sicher nicht als Admin laufen. Deine geplante Änderung benötigt hingegen administrativen Zugriff.
 
@rejoice: jup hatte ich in der vergangenheit bzw. auf nem testsystem auch schon angebunden, aber ist ein ungutes gefühl da direkt im AD zu werkeln und mit LDAPS und zertifikaten isses nicht schöner/einfacher.
ausserdem werden mehrere batches angesprochen die verschiedene aufgaben erfüllen bzw. dann wieder schnittstellen ansprechen. das mit der useranlage war nur ein beispiel.

@Daaron: das ist dann der task scheduler und daran hatte ich auch schon gedacht. hat halt den nachteil, dass es zeitverzögert läuft und ich keinen sinnvollen returncode verarbeiten kann.
die rechteproblematik seh ich eher gelassen, da die batch nicht selbst den befehl zum anlegen absetzt, sondern die parameter an verschiedene schnittstellen weitergibt. betrifft nicht nur useranlage. hätte das evtl. besser formulieren sollen.
mit dem nicht blockierten interface hast du recht, wobei ich nicht weiss ob ich das doch lieber will. dann wartet der user halt bis die aktion durchgeführt wurde. kann ich mit leben^^.
aber generell seh ich es auch als mögliche option die parameter einfach in ne txt datei zu schreiben und per task auswerten zu lassen.
 
schumischumi schrieb:
@Daaron: das ist dann der task scheduler und daran hatte ich auch schon gedacht. hat halt den nachteil, dass es zeitverzögert läuft und ich keinen sinnvollen returncode verarbeiten kann.
Wenn du das Ding auf Minutentakt stellst (geht doch sicher, oder? Cron kann sowas), dann ist die Verzögerung lächerlich. Den Return Code kannst du in der DB lagern.

mit dem nicht blockierten interface hast du recht, wobei ich nicht weiss ob ich das doch lieber will. dann wartet der user halt bis die aktion durchgeführt wurde.
Hmhm, täusch dich mal nicht. PHP im Webserver hat einen Timeout-Wert und ein Memory Limit. Wenn eines davon erreicht ist, crasht dein Script. Wenn du da was wirklich umfangreiches machst, wars das.
PHP als Command Line Interface hat, zumindest unter Linux, per Definition weder Speichergrenzen noch Timeouts. Ein PHP-CLI kann auch mal 4 Wochen durchlaufen, wenn es nötig ist. (im Hinblick auf Sockets ganz interessant)

aber generell seh ich es auch als mögliche option die parameter einfach in ne txt datei zu schreiben und per task auswerten zu lassen.
DAs wäre dann wie mein DB-Ansatz nur... einfacher.
 
jup haste wahrscheinlich recht.
wobei ich gerade überlege, ob ich die zu übergebenden parameter nicht auch einfach in die DB schreibe und sie dann von der batch auslesen lasse. hab dann kein problem mit gleichzeitigen schreib/lesezugriff.
timeout und memorylimit kann man hochsetzen und ressourcen sind weniger das problem, aber die lösung hat definitiv charme.

thx schon mal Daaron.

nur noch pro forma an die allgmeinheit: gibts noch andere ideen die ich verfolgen könnte
 
Zurück
Oben