PHP "GNU Screen" starten

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

  • PHP "GNU Screen" starten

    Ich möchte ein "Web-Interface" für einen Minecraft-Server schreiben. Dazu soll per exec Serverkommandos in eine Screen-Session geschrieben werden, die dann von Minecraft ausgeführt werden.

    Das Backup-Script sieht so aus:
    PHP-Code:
    <?php 
      
       
    /** 
        * LICENSE 
        * This work is licensed under a 
        * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License 
        * 
        * @copyright  Copyright (c) 2012 Christian Blechert (http://fiae.ws) 
        * @license    http://creativecommons.org/licenses/by-nc-sa/3.0/ 
        * @author     Christian Blechert (christian@blechert.name) 
        * @version    1.0.0 
        * @link       http://gitweb.fiae.ws/scripts.git/tree/HEAD:/linux 
        **/ 

       //--> Bukkit server directory 
       
    $bukkitdir "/opt/minecraft/"
        
       
    //--> Name of screen session (screen -S minecraft java -jar ...) 
       
    $screen_sessionname "minecraft"
        
       
    //--> Target directory for tar files 
       
    $tempdir "/home/minecraft/backup/"
        
       
    //--> World folder names to backup 
       
    $worldfolders = array( 
          
    "world"
          
    "cube"
          
    "survival"
          
    "world_the_end"
          
    "world_nether"
           
    "mc" 
       
    ); 

       
    //--> FTP Hostname 
       
    $ftp_hostname "nclabs01.netcup.net"
        
       
    //--> FTP Username 
       
    $ftp_username ""
        
       
    //--> FTP Password 
       
    $ftp_password ""
        
       
    //--> FTP Target Folder 
       
    $ftp_target "/worldbackups/"

        
    //------------------------------------------------------------------------------ 
        

       //--> Check Bukkit Directory 
       
    if(!(file_exists($bukkitdir) && is_dir($bukkitdir) && is_readable($bukkitdir) &&  
          
    file_exists($bukkitdir."server.properties") && is_file($bukkitdir."server.properties")))  
       { 
          echo 
    "Are you sure that '".$bukkitdir."' is your bukkit directory?\n"
          exit(
    1); 
       } 


       
    //--> Check temp dir 
       
    if(!(file_exists($tempdir) && is_dir($tempdir))) { 
          echo 
    "Temp dir '".$tempdir."' does not exists!"
          exit(
    1); 
       } 


       
    //--> Find screen binary 
       
    $screen_binaries = array("/usr/bin/screen""/usr/local/bin/screen"); 
       
    $screen null
       foreach(
    $screen_binaries as $tempscreen) { 
          if(
    file_exists($tempscreen) && is_file($tempscreen) && is_executable($tempscreen)) { 
             
    $screen $tempscreen
             break; 
          } 
       } 

       if(
    $screen==null) { 
          echo 
    "Screen binary not found!\n"
          exit(
    1); 
       } 


       
    //--> Find tar binary 
       
    $tar_binaries = array("/bin/tar""/usr/bin/tar""/usr/local/bin/tar"); 
       
    $tar null
       foreach(
    $tar_binaries as $temptar) { 
          if(
    file_exists($temptar) && is_file($temptar) && is_executable($temptar)) { 
             
    $tar $temptar
             break; 
          } 
       } 

       if(
    $tar==null) { 
          echo 
    "Tar binary not found!\n"
          exit(
    1); 
       } 


       
    //--> Fix Settings 
       
    $screen_command "$screen -S $screen_sessionname -X eval 'stuff \015\"%s\"\015'"
       
    $tar_command "$tar czf \"%s\" \"%s\""

       
    /** 
        * EXecute command in bukkit 
        * @global string $screen_command 
        * @param string $c  
        */ 
       
    function bcmd($c) { 
          global 
    $screen_command
          @
    exec(sprintf($screen_command$c)); 
       } 

       
    /** 
        * Create a tar archive 
        * @global string $tar_command 
        * @param string $tarname 
        * @param string $dir  
        */ 
       
    function wtar($tarname$dir) { 
          global 
    $tar_command
          @
    exec(sprintf($tar_command$tarname$dir)." 2> /dev/null"); 
       } 


       
    bcmd("say -------------------------------"); 
       
    bcmd("say Starting world backup"); 
       
    bcmd("say Disable level saving"); 
       
    bcmd("save-off"); 


       
    //--> Delete old files in temp 
       
    $files glob($tempdir."*.tar.gz"); 
       if(
    is_array($files) && count($files)>0) { 
          
    bcmd("say Delete ".count($files)." old files"); 
          foreach(
    $files as $file) { 
             @
    unlink($file); 
          } 
       } 


       
    //--> Create tar packages 
       
    $date date("Y-m-d_H-i-s"); 
       foreach(
    $worldfolders as $world) { 
          
    $worlddir $bukkitdir.$world
          
    $target $tempdir.$date."_".$world.".tar.gz"
          if(
    file_exists($worlddir) && is_dir($worlddir)) { 
             
    bcmd("say Start Backup for ".$world); 
             
    wtar($target$worlddir); 
          } else { 
             
    bcmd("say World ".$world." does not exist"); 
          } 
       } 


       
    bcmd("say Enable level saving"); 
       
    bcmd("save-on"); 

       
    //--> Upload Files 
       
    bcmd("say Upload backups to FTP"); 

       
    $files glob($tempdir.$date."*.tar.gz"); 
       if(
    is_array($files) && count($files)>0) { 

          
    // Connect to FTP 
          
    $conn_id ftp_connect($ftp_hostname); 
          
    $login_result ftp_login($conn_id$ftp_username$ftp_password); 

          
    // Copy files to FTP 
          
    foreach($files as $file) { 
             
    $fp fopen($file'r'); 

             if (
    ftp_fput($conn_id$ftp_target.basename($file), $fpFTP_BINARY)) { 
                
    bcmd("say success ".basename($file)); 
             } else { 
                
    bcmd("say failure ".basename($file)); 
             } 

             
    fclose($fp); 
          } 

          
    // Close FTP connection 
          
    ftp_close($conn_id); 

       } 

       
    bcmd("say Backups done"); 

       exit(
    0);
    Bis zu $screen_binaries funktioniert alles. Dann findet er die Screen Binaries nicht. Die Datei hat Root rechte mit 777, Openbase_dir müsste auch stimmen.

    An diesem Script möchte ich mich orientieren um das eigene Webinterface zu schreiben. Wäre toll wenn mir hier jemand helfen kann.

    Danke im Vorraus für Eure Hilfe!

    Grüße
    Dennis

    Edit:

    Die Frage wurde schon auf php.de gestellt mit dem Ergebnis, das ich telnet verwenden solle und meine Openbase_Dir Einstellungen nicht stimmen. Allerdings möchte ich sehr ungern Telnet benutzen. Danach wurde die Diskussion auf php.de "abgebrochen".
    Zuletzt geändert von Philaxx; 13.11.2012, 21:37.

  • #2
    PHP "GNU Screen" starten - PHP Forum: phpforum.de

    Kommentar


    • #3
      Hallo h3ll, ja bei PHPForum.de habe ich das Thema auch eröffnet, allerdings wurde das Thema dort geschlossen und hierrauf verwiesen, quasi nen Themen-Loop

      Kommentar


      • #4
        Zitat von Philaxx Beitrag anzeigen
        Hallo h3ll, ja bei PHPForum.de habe ich das Thema auch eröffnet, allerdings wurde das Thema dort geschlossen und hierrauf verwiesen, quasi nen Themen-Loop
        Wie kommst du zur Annahme, dass der Thread geschlossen wurde?

        Kommentar


        • #5
          Da dort der "Antworten" Button verschwunden ist

          Kommentar


          • #6
            Zitat von Philaxx Beitrag anzeigen
            Da dort der "Antworten" Button verschwunden ist
            Bei mir ist er da.

            Kommentar


            • #7
              Sicher dass du angemeldet bist im Forum und nicht gebannt wurdest?
              Sollen wir jetzt hier Support für ein anderes Forum machen
              This is what happens when an unstoppable force meets an immovable object.

              Kommentar

              Lädt...
              X