Bernhard12: mehrere Shell-Befehle mit php nohup

Hallo an alle,

ich habe folgendes Problem:
Ich möchte per php mehrere Shell-Befehle auf meinem Ubuntu-Server aufrufen, die SEQUENTIELL ablaufen müssen (ein Bild wird bearbeitet und als neue Datei gespeichert, diese wird dann weiterverarbeitet) und die ich gerne vom php-Skript entkoppeln möchte mit nohup.
Momentan sieht mein Code so aus:

$command1="nohup convert -trim +repage pic1.png pic2.png; convert pic2.png -thumbnail 500x10000 pic3.png; convert pic2.png -resize 115x1000 -gravity Center -crop 115x196+0+0  +repage pic4.png; rm pic1.png; rm pic2.png > /dev/null 2> /dev/null & echo $";  
$output = exec($command1 . ' 2>&1', $output, $return);

Das Skript an sich funktioniert auch gut, leider wartet aber mein php-Skript, bis alle Befehle beendet werden und die Befehle werden NICHT durch nohup von php entkoppelt. Dadurch bekomme ich eine ziemliche Verzögerung auf die Seite, die ich eigentlich verhindern wollte.
Ich hab schon gegoogelt, aber nur gefunden, dass es eigentlich klappen müsste.
Übrigens: Mit nur einem einzigen Befehl und nohup hat's funktioniert.

Bin für jegliche Hilfe dankbar.
vG

  1. Moin!

    Übrigens: Mit nur einem einzigen Befehl und nohup hat's funktioniert.

    Was hindert Dich, Deine Befehle in ein Shell-Skript zu schreiben und dieses auszuführen?

    #!/bin/sh  
    convert -trim +repage pic1.png pic2.png;  
    convert pic2.png -thumbnail 500x10000 pic3.png;  
    convert pic2.png -resize 115x1000 -gravity Center -crop 115x196+0+0  +repage pic4.png;  
    rm pic1.png; rm pic2.png > /dev/null 2> /dev/null & echo $  
    
    

    Wenn Dein Skript nicht warten soll- was soll dann die Ausgabe echo $?

    Übrigens sagt man convert: "Specify 'file' as '-' for standard input or output."
    Das bedeutet, Du kannst ein pipe bauen, könntest also auf das Speichern von pic2.png verzichten.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

  2. Hello,

    ich habe folgendes Problem:
    Ich möchte per php mehrere Shell-Befehle auf meinem Ubuntu-Server aufrufen, die SEQUENTIELL ablaufen müssen (ein Bild wird bearbeitet und als neue Datei gespeichert, diese wird dann weiterverarbeitet) und die ich gerne vom php-Skript entkoppeln möchte mit nohup.
    Momentan sieht mein Code so aus:

    $command1="nohup convert -trim +repage pic1.png pic2.png; convert pic2.png -thumbnail 500x10000 pic3.png; convert pic2.png -resize 115x1000 -gravity Center -crop 115x196+0+0  +repage pic4.png; rm pic1.png; rm pic2.png > /dev/null 2> /dev/null & echo $";

    $output = exec($command1 . ' 2>&1', $output, $return);

    
    >   
    > Das Skript an sich funktioniert auch gut, leider wartet aber mein php-Skript, bis alle Befehle beendet werden und die Befehle werden NICHT durch nohup von php entkoppelt.  
      
    Du hast ja auch nur dem ersten Befehl das nohup-Attribut mitgegeben, sodass er auch weiterläuft, wenn die startende Shell geschlossen wird.  
      
    Du musst ein Shellscript erstellen, dass komplett in den Hintergrund gestellt wird.  
    Das kann auch eine PHP-Shell sein, die in den Hintergrund geschoben wird.  
      
      
       $pid = exec("/usr/local/bin/php hintergrund.php > /dev/null & echo \$!");  
      
      
    würde dazu führen, dass das Script "hintergund.php" komplett vom Startprozess abgekoppelt wird. Voraussetzung ist selbstverständlich, dass die Pfad stimmen.  
      
    In hintergrund.php kannst Du dann ganz normal, unter Beachtung der maximalen Laufzeit für das PHP-System, die übrigen Aufrufe vornehmen.  
      
      
      
      
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
  3. Für diejenigen die's interessiert...
    Hab's jetzt über ein Batch-Skript gelöst, das aus php mit nohup im Hintergrund aufgerufen wird. Funktioniert einwandfrei...