Automatisch mit DB verbinden bei neustart [problem gelöst]
Automatisch mit DB verbinden bei neustart [problem gelöst]
Hi,
zur Zeit baue ich die Verbindung zu einer externen mysql db per ssh mit Screen auf. Das funktioniert soweit auch ganz gut, solange halt keine Unterbrechung der Verbindung da ist oder ich den rechner neustarten muß.
Nun meine frage.
Gibt es eine Möglichkeit die Verbindung so dauerhaft aufzubauen , dass sie z.b nach einer Verbindungstrennung automatisch wieder aufgebaut wird und auch automatisch wieder hergestellt wird wenn der Rechner mal neu gestartet wird.
Gruß
Deejoy
zur Zeit baue ich die Verbindung zu einer externen mysql db per ssh mit Screen auf. Das funktioniert soweit auch ganz gut, solange halt keine Unterbrechung der Verbindung da ist oder ich den rechner neustarten muß.
Nun meine frage.
Gibt es eine Möglichkeit die Verbindung so dauerhaft aufzubauen , dass sie z.b nach einer Verbindungstrennung automatisch wieder aufgebaut wird und auch automatisch wieder hergestellt wird wenn der Rechner mal neu gestartet wird.
Gruß
Deejoy
Last edited by deejoy on 2005-04-02 23:39, edited 1 time in total.
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Hm, ich versuche mal hier eine Lösung anzubieten, die bei mir eine Anwendung überwacht/startet. Allerdings nutze ich nicht (mehr) Screen um die Anwendung im Hintergrund zu starten:
start.sh
In anwendung.pid wird nun(wen wunderts;-)) die PID geschrieben. Ein weiteres Skript wird bei mir per Cronjob jede Minute aufgerufen. Das würde ungefähr so aussehen:
cronstart.sh
Sollte der entsprechende Dienst nun beendet werden(egal ob durch Absturz oder Serverneustart) wird dies spätestens nach einer Minute überprüft und bei Bedarf neugestartet.
Gruß, P.
start.sh
Code: Select all
/pfad/start.sh >/dev/null 2>&1 &
echo $! >/pfad/anwendung.pid
cronstart.sh
Code: Select all
#!/bin/sh
dir=/pfad/
pidfile=/pfad/anwendung.pid
cd $dir
if [ -f $pidfile ]; then
kill -0 `cat $pidfile` >/dev/null 2>&1
if [ $? -ne 0 ]; then
./start.sh >/dev/null 2>&1
fi
else
./start.sh >/dev/null 2>&1
fiGruß, P.
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Hi,
erstmal danke für den Lösungsansatz auch wenn ich noch nicht ganz weiß wie ich den umsetzen muß /kann.
also ich stelle die Verbindung so her
normalerweise lasse ich das so in Screen laufen.
wie bekomme ich das den jetzt in dein script eingefügt ? Zumal ja noch die Passwortabfrage kommt.
Auch das mit der PID ist mir nicht so ganz klar. die ändert sich doch oder ?
Gruß
Deejoy
erstmal danke für den Lösungsansatz auch wenn ich noch nicht ganz weiß wie ich den umsetzen muß /kann.
also ich stelle die Verbindung so her
Code: Select all
ssh -N -T -L -f 4000: 192.168.1.1:3306 user@192.168.1.1wie bekomme ich das den jetzt in dein script eingefügt ? Zumal ja noch die Passwortabfrage kommt.
Auch das mit der PID ist mir nicht so ganz klar. die ändert sich doch oder ?
Gruß
Deejoy
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Hm, ich weiss nicht, ob es möglich ist das Kennwort direkt in die Kommandozeile einzufügen. Vielleicht geht das mit einem Zertifikat? Kenne mich da aber nicht so aus...
Wenn es dann klappen würde, mit dem direkten Login, dann würde eine Startdatei ungefähr so aussehen:
Die PID der gestarteten ssh Instanz steht dann in anwendung.pid. Mit der Datei, die per Cronjob gestartet wird, überprüfst du dann automatisch, ob das Programm mit der PID noch läuft. Wenn nicht, wird die Startdatei wieder aufgerufen und die neue, aktuelle PID in anwendung.pid geschrieben.
Sollte funktionieren, soweit das Problem mit der Passwortabfrage gelöst ist. Aber da kenne ich mich, wie gesagt, nicht so gut aus.
Viel Glück, Gruß, P.
Wenn es dann klappen würde, mit dem direkten Login, dann würde eine Startdatei ungefähr so aussehen:
Code: Select all
#!/bin/sh
ssh -N -T -L -f 4000: 192.168.1.1:3306 user@192.168.1.1 >/dev/null 2>&1 &
echo $! >/pfad/anwendung.pid Sollte funktionieren, soweit das Problem mit der Passwortabfrage gelöst ist. Aber da kenne ich mich, wie gesagt, nicht so gut aus.
Viel Glück, Gruß, P.
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Ich glaub das ist alles viel zu kompliziert...
Was spricht gegen einen public key ohne Passwort?
Sicherheitstechnisch natürlich bedenklich, aber wenn z.B. nur 2 Serveradmins Shellzugriff haben sollte das auch kein Problem sein.
Der private key muß halt besonders sorgfältig behandelt werden.
Cheers
tcs
Was spricht gegen einen public key ohne Passwort?
Sicherheitstechnisch natürlich bedenklich, aber wenn z.B. nur 2 Serveradmins Shellzugriff haben sollte das auch kein Problem sein.
Der private key muß halt besonders sorgfältig behandelt werden.
Cheers
tcs
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Hi,
danke.
Ich blick zwar noch nicht so ganz mit der PID durch aber da werde ich mich mal durchwühlen.
Das mit dem Passwort ist noch so ein echtes Problem. Ja per Key wäre ein Login ohne passwort möglich das wollen die aber nicht.
Na mal schauen ob ich was finde
Vielen dank erstmal für denguten ansatz
Gruß
Deejoy
danke.
Ich blick zwar noch nicht so ganz mit der PID durch aber da werde ich mich mal durchwühlen.
Das mit dem Passwort ist noch so ein echtes Problem. Ja per Key wäre ein Login ohne passwort möglich das wollen die aber nicht.
Na mal schauen ob ich was finde
Vielen dank erstmal für denguten ansatz
Gruß
Deejoy
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Genau das der andere Admin das nicht möchte ;). Sonst wäre es kein Poblemtcs wrote:Ich glaub das ist alles viel zu kompliziert...
Was spricht gegen einen public key ohne Passwort?
Sicherheitstechnisch natürlich bedenklich, aber wenn z.B. nur 2 Serveradmins Shellzugriff haben sollte das auch kein Problem sein.
Der private key muß halt besonders sorgfältig behandelt werden.
Cheers
tcs
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Hi mit dem teil klappt das ganz gut
Code: Select all
#!/usr/bin/expect
set PASSWORT meinpasswd
set USER admin
set ROUTER 192.168.1.1
spawn ssh -l $USER $ROUTER
sleep 30
exp_send "$PASSWORTn"
interact Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
Was meinst Du, ist zu kompliziert? Er möchte doch gerne sichergestellt haben, dass die Verbindung wiederaufgenommen wird, sollte sie unterbrochen werden...tcs wrote:Ich glaub das ist alles viel zu kompliziert...
Mit dem Public Key wäre eine Lösung, auf das Passwort zu verzichten...
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
@Phillux
Kannst Du mir das mit der anwendung.pid noch mal genauer erklären. Da steigt ich nicht ganz durch.
Also ich habe jetzt eine datei die heist ex.sh und wird mit expect ex.sh gestartet.
Dann baut sich eine Verbindug per ssh auf.
Si und wenn diese abgebrochten wird soll die datei ex.sh noch mal gestartet werden
was muss ich den jetzt hier eintragen
echo $! >/pfad/anwendung.pid
und wo bekomme ich die pid her ?
wenn ich es richtig verstanden habe müsste der teil /pfad/anwendung.pid so aussehen
/usr/bin/ssh.pid oder ? wobei die pid duchr die jeweilige zu ersetzten ist ?!
Kannst Du mir das mit der anwendung.pid noch mal genauer erklären. Da steigt ich nicht ganz durch.
Also ich habe jetzt eine datei die heist ex.sh und wird mit expect ex.sh gestartet.
Dann baut sich eine Verbindug per ssh auf.
Si und wenn diese abgebrochten wird soll die datei ex.sh noch mal gestartet werden
was muss ich den jetzt hier eintragen
echo $! >/pfad/anwendung.pid
und wo bekomme ich die pid her ?
wenn ich es richtig verstanden habe müsste der teil /pfad/anwendung.pid so aussehen
/usr/bin/ssh.pid oder ? wobei die pid duchr die jeweilige zu ersetzten ist ?!
Re: Automatisch mit DB verbinden bei neustart [problem gelöst]
So hab mitlerweile eine Lösung für mein Problem gefunden.
Hier wie ich es gemacht habe.
als erstes habe ich per apt
installiert.
dann habe ich unter einen ordner connect angelegt.
dort ist einmal die
start.sh
und die mysql_connect.sh
in der start.sh wird jedesmal überprüft ob schon ein Prozess vorhanden ist und wenn ja wird dieser gekillt und auch die Verbindung wird getrennt sonst wären bei eine kurzzeitigen Unterbrechung 2 Verbindungen offen und auch Prozesse am laufen.
So nun habe ich noch in der /etc/inittab folgendes eingefügt
Hiermit wird das ganze gestartet.
wird nun der Server neu gestartet wird die VErbindung automatisch hergestellt genauso wenn ein Prozess gekillt wird oder die gegenseite einen ausfall hatte.
Hier wie ich es gemacht habe.
als erstes habe ich per apt
Code: Select all
apt-get install expectdann habe ich unter
Code: Select all
/var/libdort ist einmal die
start.sh
Code: Select all
#!/bin/sh
//prüft ob schon ein prozess vorhanden ist wenn ja wird er gekillt
MYSQL_PID=`ps ax | grep mysql_connect |grep -v grep| nawk '{print $1}'`
if [ "$MYSQL_PID != "" ]
then
kill -9 $MYSQL_PID
fi
CON_PID=`ps ax | grep res@dbprod.xxxx.de |grep -v grep| nawk '{print $1}'`
if [ "$CON_PID != "" ]
then
kill -9 $CON_PID
fi
expect /var/lib/connect/mysql_connect.sh &>/dev/null
und die mysql_connect.sh
Code: Select all
#!/usr/bin/expect -f
set PASSWORT test
set USER res
set timeout 25
spawn ssh -N -T -L 4000:217.77.77.67:3306 res002@dbprod.xxxxx.de
expect "assword:"
exp_send "$PASSWORTr"
interact So nun habe ich noch in der /etc/inittab folgendes eingefügt
Code: Select all
10:23:respawn:/var/lib/connect/start.sh tty10 wird nun der Server neu gestartet wird die VErbindung automatisch hergestellt genauso wenn ein Prozess gekillt wird oder die gegenseite einen ausfall hatte.