Suche Script

Bash, Shell, PHP, Python, Perl, CGI
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Suche Script

Post by zero »

Hallo Leute,

bin in bash Sprache oder auch CGI nicht so fit. Ich brauche ein Script was mir aus einer MYSQL Tabelle Werte ziehen kann. (3Spalten) anhand dieser Werte soll dann eine eigene Apache.conf erstellt werden die von der httpd.conf (festeingebaut) included wird. Kann mir da jemand helfen ?


In Der Tabelle befindet sich ID, Domain und eine IP Adresse, daraus soll in der eigenen conf Datei jeweils pro Zeile aus der Tabelle ein V-Host nach diesem prinzip ertselt werden.

Code: Select all

 <VirtualHost SERVERIP:80>
ServerName DomainAusDB
Redirect / http://IPAusDB
</VirtualHost>
  
Kann mir da jemand von den CGI oder PERL Freaks helfen ;-)

Gruß zero
squize
Userprojekt
Userprojekt
Posts: 729
Joined: 2003-05-19 16:46
Location: Karlsruhe

Re: Suche Script

Post by squize »

Hier das ganze mal als PHP:

Code: Select all

#!/path/to/php
<?
$fp = fopen("/path/to/Apache.conf","w");
$db = mysql_connect("db", "name","passwort");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT domain,serverip FROM table_name",$db);
while ($myrow = mysql_fetch_array($result)) {
  fputs($fp, "<VirtualHost IP:80>n ServerName ".$myrow["domain"]."n Redirect / http://".$myrow["serverip"]."n </VirtualHost> n");
}
fclose($fp);
?>


Es fehlt natürlich aller Code zum Fehlerabfangen (Ist die Datei vorhanden und schreibar ....) usw. und ich habe es jetzt nicht getestet, sollte aber so funktionieren.

Gruss

Marc
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: Suche Script

Post by alexander newald »

Für Apache2 und mod_perl:

in die httpd.conf

Code: Select all

LoadModule perl_module modules/mod_perl.so
PerlModule Apache2
<Perl >
use DBI;
my $mysql_user = "dbuser";
my $mysql_pwd  = "password";
my $mysql_host = "127.0.0.1";
my $mysql_port = "3306";
my $mysql_db   = "db";
my $db = "DBI:mysql:database=$mysql_db:host=$mysql_host:port=mysql_port";
my $dbh = DBI->connect( $db, $mysql_user, $mysql_pwd );
my $sth = $dbh->prepare( "SELECT domain, ip FROM vhosts" );
$sth->execute;
$sth->bind_columns( my ( $domain, $ip ) );
while ( $sth->fetch ) {
    push @{$VirtualHost{'*'}},  {
        ServerName   => $domain,
        DocumentRoot => /tmp,
        Redirect  => "/ http://$ip"
    };
}
$sth->finish;
$dbh->disconnect;
</Perl>
<Perl > muss als <Perl > und nicht als <Perl> geschrieben sein.

Bei jedem Neustart des Apache (Auch Gracefull) werden die Vhosts automatisch von Apache selbstständig aus der DB geholt und erstellt. Es reicht also einen neuen Vhost in die DB einzutragen und apachectl -k gracefull aufzurufen :wink:
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Re: Suche Script

Post by zero »

Ich glaube das ja nicht, da sist ja klasse...


Einfach so mal schnell das Script getippt ohne knorren ;-)
Vielen Vielen Dank, man findet selten soviel Hilfe wie hier. Meist wäre wohl jetzt die Antwort gekommen das ich mich erstamal damit beschäftigen soll, was ja auch richtig ist. Jedoch habe ich das nur leider reicht es für solche Sachen nocht nicht aus. Nun habe ich ein perfektes Beispiel wie man es lösen kann. Werde es gleich testen. Vielen Dank an beide Programmierer . Vielen Dank



Gruß Zero
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Re: Suche Script

Post by zero »

So habe nun beide Scripte probiert beide klappen nach kurzer anpassung auf den Server ohne Porbleme.

Jetzt habe ich noch eine Frage ich möchte nun per CRON alle 15 Minuten das Script (PHP) aufrufen lassen. Das ist ja kein Problem ich mache das in einer Batch so kann ich danach ein apache reload oder ein apachectl graceful absetzten. Ist das ein Problem wenn ich alle 15 minuten ein Reload oder graceful mache ... wenn ja wie kann ich es sonst machen bzw. welchen Befehl nehme ich von beiden am besten.


Vielen Dank.
squize
Userprojekt
Userprojekt
Posts: 729
Joined: 2003-05-19 16:46
Location: Karlsruhe

Re: Suche Script

Post by squize »

Hallo Zero,
deinen Webserver alle 15 Minuten neu starten ist eine Sache, die ich eher bleiben lassen würde.

Dir geht es doch darum, dass du Ã?nderungen bei den virtuellen Domänen gleich ändern willst, oder?

Dann musst du deinen Server auch nur neu Starten, wenn sich da was getan hat, also wenn sich eine Domain geändert hat oder eine neue hinzugekommen ist.
Dann musst du deinen Cronjob so bauen, dass er erst überprüft, ob sich etwas geändert hat und nur neu startet, wenn dies Zutrifft.

Erst einmal die Sache mit Datei neu erzeugen:

Code: Select all

if(rename("/path/to/Apache.conf","/path/to/Apache.conf".date("Ymdhi")))
  echo "Datei wurde umbenannt";
else
  echo "Datei konnte nicht umbenannt werden";
So hast du immer ein Backup der gerade aktuellen Datei. Jetzt natürlich noch die Frage, wie du abcheckst, ob sich etwas geändert hat :)
Da gibt es mehrere Möglichkeiten, du liest das alte File ein und vergleicht es mit dem Neuen, du setzt beim Ã?ndern Flags in die Datenbank usw.

Ich würde an deiner Stelle einfach mal selfphp downloaden und anfangen mit rumzuspielen, ist bei weitem nicht so schwer, wie du es dir vorstellst.

Gruss

Marc
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Re: Suche Script

Post by zero »

Hallo Marc,

danke für deine schnelle Antwort.

Nun ja das hast du recht mit der neuen File das hatte ich schon gelöst so neu bin ich da auch nicht ;-)

Das mit dem Prüfen überlege ich mir noch wie ich es am sinnvollsten mache ... werde mich dann noch mal melden.

Soweit vielen Dank an alle.
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Re: Suche Script

Post by zero »

Würde nicht ein reload reichen.. wie genau verhält sich das ? Es werden doch nur di conf Files neu eingelesen oder ?


Gruß Zero
squize
Userprojekt
Userprojekt
Posts: 729
Joined: 2003-05-19 16:46
Location: Karlsruhe

Re: Suche Script

Post by squize »

Ein Reload sollte ausreichen, macht aber am Ende für den Surfer, dem du dann ständig der Apache unterm Arsch wgeziehst keinen Unterschied.


Beim Reload bekommt der Apache soweit ich weiss ein SIGHUP Signal geschickt, dass ihn anweisst die Conf neu zu laden.

Marc
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: Suche Script

Post by alexander newald »

Ã?hhh, das macht schon einen Unterschied!

Bei einem apachectl -k graceful werden nur die Prozesse direkt beendet, die keine Anfrage bedienen, alle anderen werden erst dann beendet wenn die Anfrage fertig ist. Desweiteren werden gleichzeitig soviele Prozesse neu gestartet, dass immer die Mindestanzahl (aus httpd.conf) an Prozessen vorhanden ist.

Ein graceful Neustarten ist also jederzeit Möglich
squize
Userprojekt
Userprojekt
Posts: 729
Joined: 2003-05-19 16:46
Location: Karlsruhe

Re: Suche Script

Post by squize »

Super,
auch wieder was dazugelernt. So ähnlich hatte ich es zwar verstanden, wenn man mein obiges Posting dazu liest, muss ich aber sagen, das ich mein Halbwissen auch noch suboptimal dargestellt habe :oops: :oops:

Gruss

Marc
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Re: Suche Script

Post by zero »

Also könnte ich ein graceful sagen wir alle 15 minuten ohne Probleme absetzten ?
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover

Re: Suche Script

Post by alexander newald »

Ja kann man. Aber warum, wenn man nur alle 2 Tage das Configfile ändert?? Aber ich will mal nicht so sein:

irgendwie /tmp/httpd.conf.new erstellen

apache_neustarten:

Code: Select all

if test -e /tmp/httpd.conf.new ; then
  if ! `diff /tmp/httpd.conf.new /etc/httpd.conf 1>/dev/null `; then
     cp /tmp/httpd.conf.new /etc/httpd.conf
     apachectl gracefull  
     # bei apache 2 apachectl -k graceful
     rm /tmp/httpd.conf.new 
  fi
fi
Apache wird nur neugestartet, wenn sich die httpd.conf verändert hat
zero
Posts: 99
Joined: 2002-09-13 08:17
Location: Koblenz

Re: Suche Script

Post by zero »

Habe es angepasst und es klappt kalsse vielen Dank. Nun ja sobald sich die File also ändern wird der Server bzw. die files neu eingelesen.


Vielen Dank.

Gruß Zero
florian b
Posts: 27
Joined: 2003-01-29 12:15

Re: Suche Script

Post by florian b »

Weiß nicht, ob das jemanden interessiert, aber ich hab n gutes modul gefunden für den indianer.

mod_vshap

http://www.pookey.co.uk/sas-apache.php

Ich finde es super!