exec sudo und screen - klappt nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • exec sudo und screen - klappt nicht

    Hallo Gemeinde,

    ich habe ein Problem mit dem Start einer Serveranwendung über ein PHP-Webfrontend.
    Ich weis, dass auf diesem Thema schon recht ausführlich herumgekaut wurde, habe aber weder im Forum, noch mittels googeln eine Antwort gefunden:

    Situation:
    Auf dem Server (SuSe 9.3, PHP5) liegt eine Anwendung (java), die ich per Webinterface starten und stoppen können muss.
    Die Anwendung soll in einem screen gestartet werden und kann bei Bedarf mittels kill gecancelt werden (dann hängt sie sowieso).

    Ich habe sudo installiert und konfiguriert, folgendes Script läuft auch soweit:

    PHP-Code:
    exec("sudo -u root mkdir /home/user/einOrdner"); 
    das klappt sowohl mit obigem Direktbefehl als auch überr sh-skript

    Jetzt habe ich versucht, meine genannte Anwendung auf gleiche Weise zu starten:

    PHP-Code:
    exec("sudo -u root screen -S JavaJob java -jar /pfad/zur/anwendung.jar"
    und zwar mit und ohne screen, als sh-skript oder per Direktbefehl

    leider alles erfolglos :-(

    Kann es sein, dass es mit exec und screen Probleme gibt - oder habe ich ganz einfach was noch nicht verstanden?

    Danke für jede Hilfe

  • #2
    funktioniert denn dein aufruf auf der konsole?
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Hast du auch mal die optionalen Parameter return Array und return angegeben und geschaut ob dort drin etwas steht?
      PHP-Code:
      exec("sudo -u root screen -S JavaJob java -jar /pfad/zur/anwendung.jar",$retArray,$retValue); 
      oder gleich mal passthru() verwenden, da diese Funktion eine unmittelbare Rückgabe erzeugen sollte.
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Hallo,

        danke erstmal,

        ja, ich habe sowohl passthru(), als auch mit den Rückgabeparametern probiert - das array ist leer, retval liefert 1 (immer), das hängt vermutlich damit zusammen, dass php das skript ja erfolgreich gestartet hat, dass dann nix passiert wird für den Aufruf uninteressant sein, denke ich.

        Wie gesagt, das einfache Skript (den Ordner erstellen) läuft ja, ich tippe iirgendwie darauf, dass der screen nicht erzeugt werden kann - bin mir aber nicht sicher.

        Kommentar


        • #5
          Sorry vergessen,

          ja von der Konsole aus läuft das skript wie gewünscht.

          Kommentar


          • #6
            Haste mal probiert ne Bash Datei mit dem Aufruf des Programms zu erstellen und diese Bash Datei, dann durch exec() aufrufen zu lassen? Könnte mir vorstellen, dass das was bringen könnte
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Hallo,

              das war mein erster Weg, bisher habe ich das Skript (die Anwendung wurde schon immer über ein bash-script gestartet) immer über einen SSH Zugang gestartet, jetzt muss ich aber eine Oberfläche für den Kunden machen, in der er die Anwendung selber steuern kann und da scheitet SSH aus zweierlei Gründen aus:

              1. muss die Anwendung als root gestartet werden und ich kann nicht irgend jemanden per SSH root werden lassen

              2. die Kunden sind keine Linuxler, bzw. überhaupt keine Konsolenmenschen und die Wahrscheinlichkeit, dass sie dann mit SSH zurecht kommen geht richtung null.

              Kommentar


              • #8
                Fragt sudo nicht noch ein Passwort ab?
                [FONT="Helvetica"]twitter.com/unset[/FONT]

                Shitstorm Podcast – Wöchentliches Auskotzen

                Kommentar


                • #9
                  Sudo kann so konfiguriert werden, dass es ohne kw geht - ist natürlich nur bei statischen Befehlen empfehlenswert, überhaupt sollte man sudo nie mit Parameterfähigkeit ausstatten ...

                  Kommentar


                  • #10
                    keiner eine Idee

                    Ich glaube, wenn jemand wüsste, wie man mit exec() ein Programm in eigenem Screen starten kann, hätt ich's.

                    Vielen Dank bis hierher

                    Kommentar


                    • #11
                      Muss das wirklich in einen Screen? Reicht nicht das ganze zu backgrounden?

                      Kommentar


                      • #12
                        Das weis ich nicht, kannst Du mir kurz sagen, wie ich ein Programm über die Konsole (oder ein bash script) backgroundet starte - dann porbier ich das gleich aus.

                        Kommentar


                        • #13
                          PHP-Code:
                          JavaJob java -jar /pfad/zur/anwendung.jar 
                          Ich weiß aber nicht ob es dann auch wirklich nach Script-Ende weiterläuft..

                          Kommentar


                          • #14
                            Danke lennart,

                            ich hab das jetzt mal so in ein bash-script gepackt und nach /etc/init.d kopiert.
                            Jetzt kann ich das Ding starten und es läuft auch Abschluß weiter, allerdings habe ich jetzt, mangels screen, keinen Einblick auf die laufenden Konsolenausgaben des Programms mehr - das ist ungünstig, aber nicht lebenswichtig.

                            Jetzt muss ich nur noch den bash-code finden, mit dem ich die PID des Programms herausfinde, damit ich es auf die gleiche Weise wieder beenden kann - ist aber eigentlich ein neuer Thread.

                            Vielen Dank nochmal!

                            Kommentar


                            • #15
                              Die Standardströme kannst du umleiten.

                              Du kannst ja bei Aufruf des Skriptes die PID in eine Datei schreiben lassen, wenn du die beim Erstellen des Prozesses herausfinden kannst. Oder von dem Java-Programm selbst, vielleicht geht das.

                              Kommentar

                              Lädt...
                              X