sh Dateien ansprechen und auslesen

Headymaster

Erfahrenes Mitglied
Hallo,
ich habe eine MySQL Tablle in der der sshuser und sein pw plus die Directory des ts servers jeweils drinstehen.

Alles soll immer an dieses sh.script geschickt werden:

Code:
#! /bin/bash
# Copyright (c) 2004 TeamSpeak team   All rights reserved.
#
# Author: pwk.linuxfan 2004
#
##### Bitte Pfad anpassen zum TS verzeichnis
PATH1=/home/htdocs/web1/ts
#####

cd $PATH1

case "$1" in
	start)
		if [ -e tsserver2.pid ]; then
			echo "tsserver2.pid already exists...server already started ?";
			echo "If you are sure the server is not running, delete tsserver2.pid"
			exit 1
		else
			if [ "$UID" = "0" ]; then
				echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
				for c in $(/usr/bin/seq 1 10); do
					echo -n "!"
					sleep 1
				done
				echo !
			fi
			echo "starting the teamspeak2 server"
			if [ -e server_linux ]; then
				if [ ! -x server_linux ]; then
					echo "server_linux is not executable, trying to set it"
					chmod u+x server_linux
				fi
				if [ -x server_linux ]; then
					screen -A -m -d -S TS1 ./server_linux -PID=tsserver2.pid
				else
					echo "server_linux is not executable, fix this"
					exit 4
				fi
			else
				echo "Couldnt find server_linux"
				exit 5
			fi
		fi
	;;
    stop)
		if [ -e tsserver2.pid ]; then
			echo -n "stopping the teamspeak2 server"
			if ( kill -TERM `/bin/cat tsserver2.pid` ); then
				for c in $(/usr/bin/seq 1 300); do
					if [ -e tsserver2.pid ]; then
						echo -n "."
						sleep 1
					fi
				done
			fi
			if [ -e tsserver2.pid ]; then
				echo "server does not shutdown cleanly - killing"
				kill -KILL `cat tsserver2.pid`
				rm tsserver2.pid
				sleep 5
			else
				echo "done"
			fi
		else
			echo "tsserver2.pid is missing, no started server ?"
			exit 7
		fi
	;;
	restart)
		$0 stop && $0 start || exit 1
	;;
	status)
		if [ -e tsserver2.pid ]; then
			echo "the server seems to be running"
			exit 0
		else
			echo "the server seems to be stopped"
			exit 3
		fi
	;;
	passwords)
		if [ -e server.log ]; then
			date=$(cat server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^\([0-9]\+-[0-9]\+-[0-9]\+ [0-9]\+:[0-9]\+:[0-9]\+\).*$/\1/")
			spass=$(cat server.log | grep "superadmin account info: username: superadmin" | tail -n 1 | sed "s/^.*username: superadmin password: \([a-z0-9]\+\).*$/\1/")
			pass=$(cat server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^.*username: admin password: \([a-z0-9]\+\).*$/\1/")
			echo "Following passwords were generated on $date"
			echo "superadmin = \"$spass\""
			echo "admin      = \"$pass\""
		else
			echo "server.log not found, maybe you did not start the server yet ?"
			exit 1
		fi
	;;
	*)
		echo "Usage: $0 {start|stop|restart|status|passwords}"
		exit 2
esac
exit 0


Nun ist die Frage, wie kann ich dieses sh.Script mit einer php Datei ansprechen und es auslesen, das heißt zum Beispiel Status oder auch halt restart usw. durchführen

Außerdem soll ja oben in der sh. Datei die Dir angegeben werden.
Kann man es auch so machen, dass die Dir die man in die SQL Datenbank eingelesen hat, auch gleich wieder für die sh.datei weitergeben kann

Bite helft mir, wäre super nett.

MFG Headymaster
 
Das sieht mir aber nicht nach PHP aus. Eher nach Perl/CGI.

@MODs: Könnte man den Beitrag, wenn ich recht habe, ins richtige Forum verschieben?
 
Ne ist php, die datei ist sh, aber ich will sie ja mit php ansprechen damit ich auf meiner Page dieses sh. Script benutzen kann, um den Server zu restarten zu stopen usw.

MFg Headymaster
 
Huhu

jaja das Problem kenn ich =)

Liegt das PHP script mit dem du den TS2 Server starten stoppen usw willst auf dem selben Rechner? oder sind das verschiedene?


wenns verschiedene sind wirds schwer geht aber auch.



MfG Ulf
 
Das Problem ist,e s gibt noch gar keine php Datei, die sh. Datei liegt im webinterface Verzeichniss und muss nur noch durch eine php Datei angesprochen werden.

Aber wie kann ich
PHP:
case "stop"
oder sonst was ansprechen

Oder
PHP:
case "status"
abfragen

Ich habe echt keine Ahnung.

MFG Headymaster
 
dann müsste ich mich aber vorher auch verbinden mit dem Rechner, wo der Server läuft und wo das Script dann was amchen soll, oder

Also so ungefähr:

PHP:
$fp = make_connection($ip,$port);  
	 auth($fp,$login,$pwd);
	 get_menue($fp);

Ist das dann so für ssh connection oder wie kann ich vorher zum Server in die shell connecten und danach wieder disconnecten

MFG Niels
 
ämmm vorhin meintest du noch Der Webserver und der TeamSpeak 2 liegen auf einem Rechner!


Naja ok nehmen ja mal an es wären Verschiedene Rechner:

Es gibt da 2 Möglichkeiten:

1. http://de.php.net/ssh2 (SSH2 Lib und PHP5)

PHP:
  <?php
   $connection = ssh2_connect('shell.example.com', 22);
   ssh2_auth_password($connection, 'username', 'password');
   
   $stream = ssh2_exec($connection, '/usr/local/bin/php -i');
   ?>



2. Geht aber nur wenn der Server wo Teamspeak2 drauf ist PHP unterstützt

Datei auf dem Webserver

PHP:
   $act="start";
   
   $file=fopen("http://teamspeak2server.de/ts2_server.php?act=".$act,"r");   
   		
   $zeit = fgets($file);
   fclose($file);


Datei ts2_server.php

PHP:
   shell_exec("./datei.sh ".$_GET['act');


gruß
 
Zuletzt bearbeitet:
Habe das ma so gemacht:

ts2list.php:

PHP:
<html>
<body bgcolor="#00CCFF">
<p>
  <?php
include ("checkuser.php");
include ("mysql.php");

// Verbindung mit der Datenbank
$connectionid = mysql_connect ("$dbserver", "$dbuser", "$dbpw"); 
if (!mysql_select_db ("$dbname", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

// Datenbank auslesen
$anfrage = "SELECT Id, tsname, tsip, tsport, dir, sshuser, sshpw FROM ts2;";
	
if (!($ergebnis = mysql_query($anfrage))) {
    mysql_error();
	exit();
} else {

}

// Anzahl der Datensätze(Zeilen) zählen
$anzahl_zeilen = mysql_num_rows($ergebnis);

// Anzahl der Spalten(Felder) zählen
$anzahl_felder = mysql_num_fields($ergebnis);

// Kopf der Tabelle generieren
echo "<table border=\"1\" align=\"center\">";
echo "<tr>";
echo "<td bgcolor=\"#00CCFF\"><b>ID</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>TS-Name</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>TS-IP</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>TS-Port</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>sshuser</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>sshpw</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>Edit</b></td>";
echo "<td bgcolor=\"#00CCFF\"><b>Del</b></td>";
echo "</tr>";

// Alle Zeilen aus der Datenbank holen und in die Tabelle einfügen

while ($zeile = mysql_fetch_object($ergebnis)) {

   echo "<tr>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\">$zeile->Id</td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\"><a href=\"index.php?section=ts2server.php&id=$zeile->Id\">$zeile->tsname</a></td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\">$zeile->tsip</td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\">$zeile->tsport</td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\">$zeile->sshuser</td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\">$zeile->sshpw</td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\"><a href=\"index.php?section=editts2&id=$zeile->Id\"><img src=\"images/edit.gif\"></img></a></td>";
   echo "<td align=\"center\" bgcolor=\"#00CCFF\"><a href=\"delts2.php?id=$zeile->Id\"><img src=\"images/del.gif\"></img></a></td>";
   
}
   echo "</td>";

//Ende der HTML-Tabelle
echo "</table>";


?>
</p>
<p align="center"><a href="index.php?section=ts2add">Neuen TS2-Server hinzufügen</a> </p>
</body>
</html>

Bei dieser Datei werden die momentanen TS2 Server aus der SQL Datenbank gelesen und aufgelistet.
Mit einem klick auf den Namen des jeweiligen ts Server werden seine SQL einträge weitergegeben.


ts2server.php:

PHP:
<?php
include ("mysql.php");
include ("checkuser.php");

// Datenbankverbindung herstellen

$connectionid = mysql_connect ("$dbserver", "$dbuser", "$dbpw"); 
if (!mysql_select_db ("$dbname", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 


// Datnesätze auslesen

$anfrage = "SELECT tsip, sshuser, sshpw, tsname, dir FROM ts2 where Id='".$_GET['id']."';";
	
if (!($ergebnis = mysql_query($anfrage))) {
    mysql_error();
	exit();
} else {

}

// Variablen definieren

$ip = $row["tsip"];
$port = "22";
$login = $row["sshuser"];
$pwd = $row["sshpw"];

// SSH Connection

$connection = ssh2_connect('$ip', 22);
   ssh2_auth_password($connection, '$login', '$pwd');
   
   $stream = ssh2_exec($connection, '/usr/local/bin/php -i');

// Aktionen

switch ($_GET['do']) {

  case "start" :
	   shell_exec("ts2/ts.sh "'start');
     break;
  case "stop" :
       shell_exec("ts2/ts.sh "'stop');
     break;	 
  case "restart" :
       shell_exec("ts2/ts.sh "'restart');
     break;
?>

<html>
<body>
<table align="center" background="#00CCFF" border="1">
<tr align="center">
    <td bgcolor="#00CCFF"><?php echo $tsname; ?></td>
</tr>	
<tr align="center">
    <td bgcolor="#00CCFF"><?php echo $ip:$port; ?></td>
</tr>
<tr align="center">
    <td bgcolor="#00CCFF"><?php shell_exec("ts2/ts.sh "'status'); ?></td>
</tr>
<tr align="center">
    <td bgcolor="#00CCFF"><a href="ts2server.php?do=start">Start</a></td>
	<td bgcolor="#00CCFF"><a href="ts2server.php?do=stop">Stop</a></td>
	<td bgcolor="#00ccdd"><a href="ts2server.php?do=restart">Restart</a></td>
</tr>
</table>
</body>
</html>

Bekomme noch diesen Fehler:

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /usr/export/www/vhosts/funnetwork/hosting/headymaster16/ts2server.php on line 44



Das ist meine momentane ts2server.php.
Sie soll:

-ts server starten stopen und restarten können plus status anzeige
- daten bezieht sie aus der vorherigen Datei ts2list.php


Mein Prob ist nun, würde es so funktionieren

und wie kann ich der ts.sh noch die Directory wo der ts server liegt übergeben

in der sh Datei steht am Anfang:

Code:
#! /bin/bash
# Copyright (c) 2004 TeamSpeak team   All rights reserved.
#
# Author: pwk.linuxfan 2004
#
##### Bitte Pfad anpassen zum TS verzeichnis
PATH1=/home/htdocs/web1/ts
#####

cd $PATH1

So der Path soll halt immer der sein, der von der vorherigen datei ts2list.php übergeben wurde, wie kann man das machen


Wäre cool wenn du mir da noch ein bissle helfen könntest.

MFG Headymaster
 
Zuletzt bearbeitet:
Zurück