kostenloser Webspace werbefrei: lima-city


PHP || Problem bei Ausführung von mehr als einem SSH Befehl

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    Hallo,

    ich hab mir einen Linux Server gemietet, auf dem ich via SSH Befehle ausführen möchte.
    Das klappt auch ohne Probleme mit folgendem Code:
    function_exists("ssh2_connect") or die();
    $con = ssh2_connect($sshserver, 22) or die();
    ssh2_auth_password($con, $sshuser, $sshpassword) or die();
    ssh2_exec($con, "a2ensite ".$seite) or die();


    Das Problem das ich jetzt habe....wenn ich versuche, mehrere Befehle in einem Code via SSH hintereinander auszuführen, wartet PHP nicht damit, dass der erste SSH-Befehl vollständig abgelaufen ist, bevor der zweite gesendet wird.
    In meinem Fall versuche ich, eine Sub-Domain ab- und anzuschalten, wenn verschiedene Faktoren zutreffen.

    Das sieht dann ungefähr so aus:
    $change = false;
    
    function_exists("ssh2_connect") or die();
    $con = ssh2_connect($sshserver, 22) or die();
    ssh2_auth_password($con, $sshuser, $sshpassword) or die();
    
    if ($active == "1" && $payeduntil < $datetimenow)
    {
      ssh2_exec($con, "a2dissite ".$site) or die();
      $change = true;
    }
    
    elseif ($active == "0" && $payeduntil > $datetimenow)
    {
      ssh2_exec($con, "a2ensite ".$site) or die();
      $change = true;
    }
    
    if ($change)
    {
      ssh2_exec($con, "/etc/init.d/apache2 reload") or die();
    }


    Hier wird folgendes geprüft...

    Ist der Status der Seite auf "1" (also aktiv), aber das heutige Datum größer als das Datum, bis zu dem die Seite eigentlich laufen sollte, wir der Befehl "a2dissite Seitenname" gesendet. (Weiterleitung der Sub-Domain aufheben)
    Ist der Status der Seite auf "0" (also nicht aktiv), aber das heutige Datum kleiner als das Datum, bis zu dem die Seite eigentlich laufen sollte, wir der Befehl "a2ensite Seitenname" gesendet. (Weiterleitung der Sub-Domain einrichten)

    Gleichzeitig wird, sofern einer der beiden Bedingungen zutrifft, die bool-Variable $change auf true gesetzt, damit im Anschluss der Code mit dieser Bedingung ausgeführt wird.
    Der Code soll dann die Apache2-Konfiguration neu einlesen, damit die geänderten Sub-Domain-Weiterleitungen aktiv werden. ("/etc/init.d/apache2 reload") or die();

    Aaaalsoooo....

    Wenn ich die Befehle "a2ensite Seitenname" und "/etc/init.d/apache2 reload" einzeln hintereinander mit PHP ausführe, klappt das Ganze wunderbar.
    Wenn ich sie aber (wie hier) im selben Code verpacke, scheint PHP den Befehl "/etc/init.d/apache2 reload" zu senden, bevor der Befehl "a2ensite Seitenname" beendet ist.
    Das führt dazu, dass der Befehl "/etc/init.d/apache2 reload" ignoriert zu werden scheint, denn wenn ich die Einstellungen der Sub-Domains kontrolliere, ist der Befehl "a2ensite Seitenname" ausgeführt worden.

    Meine Frage also....wie kann ich über eine SSH-Verbindung prüfen lassen, ob der vorherige Befehl bereits ausgeführt wurde, oder ob er noch läuft?


    Vielen Dank schonmal!


    EDIT:

    Problem gelöst!
    Vielen Dank an "bloedesvieh" für die Hilfe, ich hoffe, meine Fragen haben keine bleibenden Schäden hinterlassen. =)

    Gelöst wurde die Sache schlussendlich nicht über SSH, sondern durch den Befehl "shell_exec()".
    Befehle, die hintereinander ausgeführt werden sollen, müssen dort nur mit einem Strichpunkt getrennt übergeben werden.

    Beispiel:


    <?php
    shell_exec("a2ensite testseite; /etc/init.d/apache2 reload");
    ?>


    Beitrag zuletzt geändert: 9.12.2011 18:37:39 von adelwoehrer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!