----- Ursprüngliche Mail ----
> Von: "[email protected]" <[email protected]>
> An: [email protected]
> Gesendet: Donnerstag, den 26. Februar 2009, 10:54:53 Uhr
> Betreff: Re: Shell-Skripte über andres Skript aufrufen
>
> Hallo Frank
>
> Zitat von Frank Gerlach :
>
> > Google innerhalb der PHP Doku dochmal nach "exec" "execv" und "fork". Das
> > sind zwar C stdlib Aufrufe, aber oft sind diese in PHP nachgebildet.
> > Zumindest sollte man mit diesen Schlüsselwörtern die entsprechenden PHP
> > calls finden.
> Ich nutze exec zum Aufruf der Skripte (system und Co. sind für meine
> Anforderungen nicht geeignet). Aber wie gesagt, ich habe das dumpfe
> Gefühl das die Skripte nicht im Hintergrund aufgerufen werden. exec
> wartet, bis das Skript abgearbeitet ist. Und das will ich nicht.
mach es wie einige entwickler bei uns im haus
schreibe den befehl in jeweils eine datei die dann von einem regelmässigen
script abgearbeitet wird (warum sie keine pipe nehmen weiß ich nicht auch nicht
ob es geht)
----
ein Beispiel (kein php code)
$datei = run_<date>.sh
$befehel = 'cd $programmpfad && nohup ./' . $programmname > $logFile 2>
$errorFile & echo $!';
write_to $datei $befehl
bash>
more run_26022009.sh
cd $programmpfad && nohup ./' . $programmname > $logFile 2> $errorFile & echo
$!'
more ausfuehren.sh
for i in $(ls | grep run_)
do
/bin/bash $i
rm $i
done
----
ob mit cronjob watchdog oder ne eigene Lösung zum regelmässigen starten das ist
geschmackssache
---
dann ist php nicht blokiert
>
> Das Problem muss es doch auch bei Aufruf über andere
> Programmiersprachen geben?
jain (kommt auf die sprache drauf an)
--php über einen webserver-- (php kann man auch auf der konsole ausführen wie
es sich dort genau verhält weiß ich jetzt nicht weil es da bei weiteren bessere
sprachen gibt)
weil php ist nicht interaktiv es hält keine verbindungen (es läd ja nichts nach
es schickt die ne statische htmlseite) (problem haste ja auch wenn du ne
datenbank anfrage absetzt)
hoffe es ist klargeworden was ich sagen will (php baut die eine htmlseite die
ist statisch, erst wenn er alle daten hat kann er die seite vollständig bauen )
du müsstes wenn das php script so bauen das es dein eigentliches script als art
fork aufruft dann sollte php nur solange "warten" bis der fork fertig ist
da kannste vieleicht noch was mit ajax machen, das dann informationen nachlädt
etc (oder java da kann ich dir aber nur beim trinken helfen)
---
zur zeitmessung habe ich auch noch eine idee schreib die anfangszeit weg (db
file etc) und wenn du sie ausliest weßt du wann gesartet und mit der momentanen
zeit kannste rechnen wie lange es schon dauert
ein pid fil ob prozess läuft (und die pid zum killen) und eine endzeit wann
beendet dann kann man auch später noch sehen wie lange er lief
--
>Ich bin leicht verunsichert...
naja alles halb so schlimm
Andreas
>
> > Ausserdem: Das Aufrufen eines shellskriptes durch einen Webserver ist
> > möglicherweise ein grosses Sicherheitsloch. Am Besten ist eine genaue
> > Prüfung der übergebenen Parameter. Mindestens muss die Seite durch
> > https/Basic Authentication geschützt werden.
> Dieses Problem ist mir durchaus bewusst. Aber manchmal gibt es
> Anforderungen ... du verstehst ;-).
>
> Falk
>
> > Am 26. Februar 2009 09:02 schrieb :
> >
> >> Hallo LUG,
> >>
> >> bitte nicht steinigen, aber ich habe da mal einige Fragen zu
> >> Shell-Skripten und PHP. Wem die Abkürzung PHP stört, kann vermutlich
> >> auch Phyton oder Ruby einsetzen ;-). Nun aber los:
> >>
> >> Die Idee ist folgende: Einer Menge User soll ein Web-Interface zur
> >> Verfügung gestellt werden. Dieses Interface beinhaltet eine Liste von
> >> Shell-Scripten, die aufgerufen werden können (klick auf grünem Pfeil).
> >> Es sollen Start- und Endzeit, ob das Programm läuft, ob es auf stdout
> >> bzw stderr was geschrieben hat angezeigt werden sowie die Möglichkeit
> >> des Abbruchs (klick auf rotes Kreuz) geben. Die Shell-Skripte sollen
> >> im Hintergrund gestartet werden.
> >>
> >> Was funktioniert: Starten des Programmes, abbrechen des Programmes,
> >> Startzeit des Programmes.
> >>
> >> Was nicht funktioniert: Das Programm im Hintergrund starten.
> >> Ich starte das Skript per
> >>
> >> $command = 'cd ' . $programmpfad . ' && ' . 'nohup ./' . $programmname
> >> . ' > ' . $logFile . ' 2> ' . $errorFile . ' & echo $!';
> >>
> >> Auf der Shell sieht es ungefähr so aus:
> >>
> >> cd /mein/pfad/zum/programm && nohup ./programmname > run.log 2>
> >> error.lug & echo $!
> >>
> >> Damit hätte ich auch die PID, über die ich kill ausführen kann. Nun
> >> wartet aber trotzdem PHP bis das Programm im Hintergrund fertig ist
> >> mit werkeln. Irgendwo ist das ja logisch, aber nicht gewünscht. Hat
> >> jemand eine Idee? Also PHP soll das Skript starten und mir mitteilen:
> >> Läuft. Das Skript soll werkeln. Wenn ich die PHP-Seite aktualisiere
> >> soll mir irgendwann angezeigt werden: Läuft nicht mehr, erfolgreich
> >> beendet oder Fehler (möglich über die Logfiles).
> >>
> >> Was auch nicht funktioniert: Zeitmessung
> >>
> >> Ich will wissen, wie lange das Programm im HG werkelte. Nutze ich
> >> time, bekomme ich die PID von time (war auch interessant
> >> herauszufinden, dass es einmal time als eigenständiges Programm und
> >> einmal time als Bash-Befehl gibt). Hat jemand eine Idee wie ich ohne
> >> time die Laufzeit bekomme?
> >>
> >> Natürlich bin ich auch für ganz andere Ideen offen.
> >>
> >> Vielen Dank für eure Mithilfe,
> >>
> >> Falk
> >>
> >>
> >>
> >> _______________________________________________
> >> Lug-dd maillist - [email protected]
> >> https://ssl.schlittermann.de/mailman/listinfo/lug-dd
> >>
> >
> >
> >
> > --
> > "Frauen sind wie Juwelen. Man muss sie mit Fassung tragen" Heinz Erhardt
> >
>
>
>
>
>
> _______________________________________________
> Lug-dd maillist - [email protected]
> https://ssl.schlittermann.de/mailman/listinfo/lug-dd
_______________________________________________
Lug-dd maillist - [email protected]
https://ssl.schlittermann.de/mailman/listinfo/lug-dd