script schreiben und starten

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

  • script schreiben und starten

    Hallo leute,

    ich bins mal wieder ^^ mit einer meiner fragen xD
    es geht darum, das ich immo an nem kleinem Webinterface bastle und ich die möglichkeit suche ein Startscript beim klick auf einem (Start) Button mit Daten aus der mysqltabelle erstellen zu lassen (im ordner desjenigen, der sich im webinterface angemeldet hat [per mysql ist der Ort / Ordner definiert]) und dann soll das ganze auch noch ausgeführt werden .... (liegt alles auf ein und dem selben server und [wo einige wieder mekkern werden ^^] sicherheitsmäßig ist erstmal irrelevant)

    kann mir da ggf jm. helfen?

  • #2
    Wie sieht dein Ansatz aus? Wo klemmt es konkret?

    Kommentar


    • #3
      wenn man ansatz sagen kann ^^
      (ist von mir selber, deshalb also eben anfängerlike ^^)

      Code:
      <?php 
      include ("auth.php"); 
      include ("header.php");
      include ("inc.php");
      
      $port = $_SESSION["user_Port"];
      $ip = $_SESSION["user_Serverip"];
      $players = $_SESSION["user_Slots"];
      $user = $_SESSION["user_nickname"];
      $game = $_SESSION["user_Gamekurz"];
      $pfadscript = "/home/$user/$game/";
      $scriptname = "start.sh";
      $script_path = "$pfadscript$scriptname";
      $script = [COLOR=Red]hier muss i-wie das drinne stehen was in die startconfig soll... (z.b. inhalt von der Zeile des users in der Datenbank abschnitt config oder so ^^)[/COLOR];
      
      ?>
      <head>
      <meta http-equiv="refresh" content="3; URL=starten.php">
      </head>
      
      
      <?php
      $act = $HTTP_GET_VARS['act'];
      //  Server starten
      if ($act=="start")
      {
        file_put_contents($script_path, $script);
        $output = shell_exec("$script_path$scriptname");
      }
      ?>
      
      
      
      <table border="0" width="80%">
      <tr>
          <td width="50%" align="center">
      <p>
      
      
      <?php
      if(@fsockopen("$_SESSION[user_Serverip]","$_SESSION[user_Port]",&$errno,&$errstr,2)){
      echo "<font color=green><b>Server ist online</font></b>";
      
      }
      
      else{
      echo '<a href="starten.php?act=start">Server starten</a>';
      }
      ?>
      
      
      </td>
      </tr>
      </table>
      das rote ist das problem ^^

      Kommentar


      • #4
        hier muss i-wie das drinne stehen was in die startconfig soll
        Wo soll es herkommen? Wie kommst du da ran?
        Datenbank, mysql_query() und Co.? Dann los!

        Aber mal ganz grundsätzlich:

        Was soll das werden?
        Du möchtest ein Shellscript erzeugen, als Datei speichern und dann sofort und einmalig ausführen? Was soll denn dieses Shellscript machen, was sich nicht direkt mit PHP erledigen läßt?

        Wieso machst du das immer?
        Du willst bei jedem Aufruf des PHP-Scripts das Shellscript erzeugen und speichern, es aber nur ausführen, wenn ?act=... übermittelt wurde. Überflüssig!

        Kommentar


        • #5
          also ^^

          das soll nen startscript sein, es liegt bei dem benutzer im ftp und (muss auch da liegen) und soll numal nicht bearbeitet werden dürfen (es reicht, wenn es jedesmal neu geschrieben wird beim klick auf start)

          ja es soll geschrieben werden und dann auch ausgeführt....
          nur kp wie ich ihm sage schreibe das aus der mysql datenbank unter config in die datei

          Kommentar


          • #6
            Ich wiederhole mich: Was soll denn dieses Shellscript machen, was sich nicht direkt mit PHP erledigen läßt?

            Zitat von Restless Beitrag anzeigen
            ja es soll geschrieben werden und dann auch ausgeführt....
            Es wird aber unter bestimmten Bedingungen auch geschrieben und NICHT ausgeführt.

            Was meinst du mit "das aus der mysql datenbank unter config". Beschreibe dein Problem mal vernünftig!

            Kommentar


            • #7
              also ich möchte einfach pro benutzer das feld config haben und da steht dann das drinne, was ins script rein soll ^^

              Kommentar


              • #8
                mysql_query

                Kommentar


                • #9
                  Tja also das mit dem schreiben funktioniert jetzt zwar aber dafür sind neue Probleme aufgetreten ...

                  1. wenn er die datei schreibt, dann ist sie komischerweise größer, als wenn ich den code manuell einfüge (ansich nicht das Problem), aber er gibt mir immer einen Fehler aus ... ggf. liegts am closebefehl im php code ... denn wenn ich die datei bearbeite (z.b. leerzeichen rein und dann speichere) dann funktioniert sie.
                  (Startscript und neuer PHP code sind unten)

                  2. ich habe jetzt das Startscript in der Datenbank (Feld Config, Type Text) nu schreibt er das ja auch schön rein ^^ aber ich will es eigendlich so haben, dass ich nicht jedem user nen eingenes Script schreiben muss sondern, das er die Variablen mit denen vom user ersetz werden (wie als wenn ich jetzt in php währe $ip mit 127.0.0.1 austauchen [oder was auch immer beim angemeldeten User in der MySQL datenbank im Feld IP steht])

                  Neuer PHP Code:
                  Code:
                  <?php
                  include ("auth.php"); 
                  include ("header.php");
                  include ("inc.php");
                  
                  $port = $_SESSION["user_Port"];
                  $ip = $_SESSION["user_Serverip"];
                  $players = $_SESSION["user_Slots"];
                  $user = $_SESSION["user_nickname"];
                  $game = $_SESSION["user_Gamekurz"];
                  
                  $pfadscript = "/home/$user/123/";
                  $scriptname = "start.sh";
                  $script_path = ("$pfadscript$scriptname");
                  
                  $dbverbindung = mysql_connect (localhost, name, pw);
                  $dbanfrage = "SELECT * from games where Game='123'";
                  $result = mysql_db_query (db, $dbanfrage, $dbverbindung);
                  while ($ausgabe = mysql_fetch_array ($result))
                  $dateiconfausgabe = $ausgabe[Config];
                  ?>
                  
                  <head>
                  <meta http-equiv="refresh" content="3; URL=starten.php">
                  </head>
                  
                  <?php
                  $act = $HTTP_GET_VARS['act'];
                  //  Server starten
                  if ($act=="start")
                  {
                    $handle = fopen ("$script_path", "w+");
                    fwrite($handle,$dateiconfausgabe);
                    fclose($handle);
                    $output = shell_exec("$script_path start");
                  }
                  ?>
                  
                  <table border="0" width="80%">
                  <tr>
                      <td width="50%" align="center">
                  <p>
                  
                  <?php
                  if(@fsockopen("$_SESSION[user_Serverip]","$_SESSION[user_Port]",&$errno,&$errstr,2)){
                  echo "<font color=green><b>Spiel ist online</font></b>";
                  }
                  else{
                  echo '<a href="starten.php?act=start">Spiel starten</a>';
                  }
                  ?>
                  </td>
                  </tr>
                  </table>
                  Startscript:
                  Code:
                  #!/bin/sh
                  
                  DIR=/home/Restless/123
                  DAEMON=123_start
                  NAME=spiel1
                  PARAMS='-port $port +ip $ip +maxplayers $maxplayers +map $map'
                  
                  case "$1" in
                  start)
                     echo "Starting: $NAME"
                     if [ -e $DIR ];
                     then
                      cd $DIR
                     screen -d -m -S $NAME ./$DAEMON $PARAMS
                     else echo "No such directory: $DIR!"
                     fi
                     ;;
                  
                  stop)
                     if [[ `screen -ls |grep $NAME` ]]
                     then
                         echo -n "Stopping: $NAME"
                         kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
                         echo " ... done."
                     else
                         echo "Coulnd't find a running $DESC"
                     fi
                     ;;
                  
                  restart)
                     if [[ `screen -ls |grep $NAME` ]]
                     then
                         echo -n "Stopping: $NAME"
                         kill `screen -ls |grep $NAME |awk -F . '{print $1}'|awk '{print $1}'`
                         echo " ... done."
                     else
                         echo "Coulnd't find a running $DESC"
                     fi
                     
                     echo -n "Starting: $NAME"
                     cd $DIR
                     screen -A -m -d -S $NAME ./$DAEMON $PARAMS
                     echo " ... done."
                     ;;
                  
                  status)
                     screen -ls | grep -wq "$NAME" && echo "$NAME is UP" || echo "$NAME is DOWN"
                     ;;
                  
                  *)
                     echo "Usage: $0 {start|stop|status|restart}"
                     exit 1
                     ;;
                  esac
                  
                  exit 0
                  sry wenns ein bissle lang ist ^^

                  Kommentar


                  • #10
                    ok (erstmal sry wegen jetzt 2mal posten hintereinander aber ich finde den letzten eintrag schon lang genug ^^)
                    ich weiß jetzt zumindest schonmal an was es liegt ^^ (bekomme den selben Fehler)
                    http://www.wcm.at/forum/showthread.p...n-234893.html?
                    dort ist es erklärt ^^ nur muss ich das noch i-wie mysql / php beibringen xD

                    UPDATE:
                    Ok habs hinbekommen ^^ einafch
                    Code:
                    apt-get install tofrodos
                    und dann eben dos2unix start.sh


                    Jetzt müsste es nur noch möglich sein, das die variablen im startscript automatisch angepasst werden, wenn es aus der datenbank geholt wird und in die Datei geschrieben wird.
                    Zuletzt geändert von Restless; 10.12.2009, 21:12.

                    Kommentar


                    • #11
                      Windows-Zeilenumbrüche funktionieren nicht, es muss Unix-Style sein. Hast du selbst herausgefunden. Also hör doch einfach auf, Windows-Zeilenumbrüche reinzuschreiben!
                      Wäre jedenfalls sinnvoller, als eine nachträgliche Konvertierung.

                      Dein eigentliches Problem läßt sich mit str_replace() lösen.

                      Kommentar

                      Lädt...
                      X