braunimahony
Goto Top

Vmware mit php starten

Ich möchte eine VMware über den Browser starten ...

Hallo,

Ich habe folgendes vor: Ich möchte eine VMWare sobald sie benötigt wird aus dem Web starten. dazu ist auf dem Server wo VMware läuft ein Apache Web Server installiert.

Mit folgendem Befehl möchte ich den Server starten:
passthru('vmrun.exe -T ws start "G:\***\Ubuntu.vmx"',$out);

Wobei zu sagen ist das vmrun.exe auf C: ist und Ubuntu auf G:

Doch es passiert nichts außer das sich der Browser dumm und dämlich lädt und irgendwann die Fehler Meldung "200 OK" kommt.

- Ich habe es schon über eine Batchdatei probiert
- habe in der apache config das VMdir als vhost eingetragen und versucht darin zu arbeiten.

Macht alles keinen Unterschied. Woran kann es liegen?

wenn ich passthru('vmrun.exe",$out) eingebe bekomme ich im browser die Help angezeigt wie es auch sein sollte!


Freue mich über jede Hilfe!

lg Marcel

Content-ID: 140248

Url: https://administrator.de/contentid/140248

Ausgedruckt am: 24.11.2024 um 09:11 Uhr

matze2010
matze2010 09.04.2010 um 17:31:21 Uhr
Goto Top
Hallo Marcel,

weshalb nimmst du nicht VMWare Server? Der ist eigentlich dafür vorgesehen und bringt eine schöne Oberfläche mit.

Lg
Matze
braunimahony
braunimahony 09.04.2010 um 18:17:06 Uhr
Goto Top
Komfortabler ist das damit bestimmt ... Die idee ist folgende... Ich habe meinen home rechner als Test Server.... wenn ein Kunde sich den aktuellen stand anschauen möchte und ich die entsprechenden Server bzw. VMware nicht gestartet habe, soll diese automatisch gestartet werden sobald er versucht auf diese zuzugreifen. Wenn ich micht nicht täusche läuft der VMware Server garnicht auf einem normalen betriebssystem oder?

lg
matze2010
matze2010 09.04.2010 um 18:54:46 Uhr
Goto Top
Hallo,

doch, er läuft auch auf einem "normalen" Betriebssystem, was immer (Windows, Linux) du darunter verstehst. Das schöne ist, dass VMs dort "im Hintergrund" als Dienst laufen können, also ohne Zwang einer grafischen Darstellung. Somit ist auch Perfomancetechnisch ein kleines Plus drin, weil die "Anzeige" nicht noch vom Hostbetriebssystem angezeigt werden muss.

Bevor du mit PHP rumwirscht (das bekäme dein Kunde ja mit), wirkt es imho besser, sich auf einem VMWare-Server einzuloggen und dort eine VM zu starten. Du könntest z.B. deinem Benutzer einen eigenen Account geben, wo er dann nur seine VM sehen könnte und diese starten und stoppen kann, macht vielleicht mehr Eindruck, als ein PHP Skript.

Probiers einfach mal aus.

Bzgl. PHP, läuft

vmrun.exe -T ws start "G:\***\Ubuntu.vmx

in deiner Kommandozeile?
Kehrt der Aufruf sofort zurück? (darauf wartet nämlich passthru, und zwar eigentlich so lange, bis vmrun.exe beendet wurde. Je nachdem, wie lange das dauert?!)

200 OK
ist übrigens keine Fehlermeldung...

Lg
Matze
braunimahony
braunimahony 09.04.2010 um 22:39:24 Uhr
Goto Top
Ich werde deinen Vorschlag mit dem VMware Server in betracht ziehen. Trotz allem möchte ich die lösung zu meinem Problem gerne in erfahrung bringen.

In der cmd läuft der befehl ohne Probleme. Nur nicht über php. Es startet noch nicht mal ein editor habe ich gerade festgestellt. Wenn ich system("notepad.exe") mache oder "C:\windows\notepad.exe"

Safemode ist Off.

Nein, er kehrt nicht zurück? läuft bis zur Zeitüberschreitung.

Das mit der 200 stand wirklich da face-big-smile Zuerst oben in H1 "OK" und dann fehlermeldung 200

Kann es sein das beim Apache eventuell die erlaubten Pfade angepasst werden müssen? so das z.B. der aufruf von Programmen in C:\Windows nicht erlaubt ist?!


lg
matze2010
matze2010 11.04.2010 um 14:57:51 Uhr
Goto Top
Hallo,

ne, den Editor startet er bei mir auch nicht, wenngleich er kurz cmd startet. Mit

<edit>
passthru("cmd /C notepad",$out);

startet ihn wohl.
/C sagt, alles was jetzt kommt ist ein Command.
</edit>

<?php
passthru("cmd",$out);  
?>

bekomme ich unter Windows die Ausgabe
Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten. C:\xampp\htdocs>

Was auch läuft (laufen sollte):
passthru("dir C:\\",$out);  

Die Prozesse startet er ja jeweils als Apache Kindprozesse. (Bzw. IIS Kindprozesse des php-cgi). Bei einer Zeitüberschreitung killt der Apache/IIS dann den PHP-Prozess, und damit auch die Kindprozesse.

Wenn du z.B. ProcessExplorer von
http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx
nutzt, dann erkennst du folgendes:

  1. Starte "cmd" und suche den Prozess in der Liste.
  2. Nun öffnest du mit "notepad" einen Editor, dieser taucht als "Kind" von "cmd" in der Liste auf.
  3. Ein Rechtsklick auf "cmd" und "KillProcessTree" ist vergleichbar mit dem Ende der Laufzeit deines Scriptes.
  4. Wie du erkennst, wird auch der Notepad-Prozess beendet.

Somit wird eben auch dein VMWare Programm gekillt, wenn die Laufzeit vorbei ist. Leider habe ich keine Möglichkeit gefunden, den Kindprozess einfach zu trennen. Du bräuchtest etwas wie einen kickoff-Prozess, welcher dann den gestarteten Prozess einfach dem Explorer "anhängt" und sich dann sofort beendet. Allerdings lässt sich dann eben in PHP nicht mehr der Rückgabewert auswerten, welchen du ja mit passthru bekommst. Also kannst du auch nicht sicher gehen, dass der VMWare Prozess wirklich läuft.

Lg
Matze