Zum Inhalt springen

Batch-Datei oder ähnliches


SirBarry

Empfohlene Beiträge

Servus,

ich hab jetzt grad schon das ganze Forum durchgeforstet und bin noch zu keinem Ergebnis gekommen.

Weiß jemand wie man unter DOS eine Abfrage schreibt die z.B. in einer IF-Abfrage

herausfindet ob der Befehl "mysqladmin status" einen bestimmten Wert

zurückgibt, bzw. ob der mysqld läuft oder nicht?

Wenn ja, soll der Befehl "mysqladmin shutdown" ausgeführt werden und

anschließend immer die "start.exe" aufrufen.

Das Ganze natürlich in ne Batch-Datei oder EXE packen.

Bin grad dabei einen CD-ROM-Webserver lauffähig zu machen,

allerdings beendet sich dieser MySQL-Prozess oft nicht von alleine und das

hat unter Win98 die übelsten Folgen wenn ich dann den Prozess nochmal

starte indem ich die start.exe nochmal aufrufe.

Danke schon mal für eure Hilfe.

Viele Grüße...

SirBarry :marine

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also mir fallen da spontan zwei Möglichkeiten ein:

1. Wenn du es aus einem C-Programm mit der System() Funktion aufrufst, kriegst du als Returnwert den DOS-ErrorLevel zurück. Wäre dann nur noch rauszufinden, was für welche, bzw ob dein Befehl die DOS-ErrorLevel überhaupt setzt.

2. Du könntest den Befehl mit dem Output Operator (>) aufrufen, so dass die Ausgaben des Programms in eine Datei geschrieben werden, und diese dann mit einem C-Programm parsen.

Man kann den Returnwert auch sicher irgendwie in der Shell abfragen, aber da ist mir leider nichts bekannt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es sollte mittels find auch einfacher gehen:

mysqladmin status > %temp%\status.txt

find "Suchstring" < %temp%\status.txt

if errorlevel 1 goto ende

rem wenn der Suchstring nicht gefunden wurde, gibt find einen Fehlercode >=1 zurück; dann zum Ende springen


rem Jetzt die Aktionen, wenn der Suchstring gefunden wurde:

mysqladmin shutdown

start.exe


:ende

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, hab jetzt mal die DOS-Variante getestet. Scheint auf den ersten Blick zu funktionieren. Aber die Datei status.txt wird ja IMMER erstellt und verfehlt dann doch ihren Zweck, richtig?

Das sollte doch auch gehen wenn ich einfach mysqladmin status schreibe und dann die IF-Abfrage mache. Da sollte ja auch so einen Errorlevel geschrieben werden, oder?

Beim ersten Mal bekomme ich übrigens immer ne Fehlermeldung. Can't connect usw...

Hab schon versucht mit @echo off Fehlermeldungen zu unterdrücken, aber das geht scheinbar nicht, oder doch?

Danke schon mal für eure ersten Hilfen.

SirBarry :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Noch was:

dieser mysqladmin Befehl lässt sich nur ausführen wenn der Webserver an sich läuft, sprich die start.exe ausgeführt wurde. Ansonsten gibts ne Fehlermeldung,

Die soll übrigens am Schluss immer in jedemfall gestartet werden, lediglich der mysqld muss irgendwie beendet werden, falls er läuft, bevor man die start.exe startet.

So isses vielleicht ein bisschen klarer!?

SirBarry   () :marine ()

            -----------

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Die Fehlermeldung wird wahrscheinlich auf stderror ausgebene, echo off bezieht sich aber nur auf stdout. Der ERRORLEVEL wird mit dem return-Wert von externen Programmen gesetzt, welcher Wert das konkret ist, hängt von dem aufgerufenen Programm ab und sollte dementsprechend dort in der Manual-Page oder Beschreibung stehen (alternativ kannst Du ihn Dir auch testweise durch deine Batch-Datei ausgeben lassen).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich weiss nicht ob dir das wirklich hilft, aber wenn du in der Shell einen Dateinamen eingibst, z.B. c:\test.txt, aber die Datei nicht existiert, dann wird der errorlevel auf 9009 gesetzt.

Aber wenn die Datei immer erzeugt wird, bringt dir das ja auch nichts.

Aber mit find suchst du ja einen String in einem File. Du kannst also mit find überprüfen, ob in der Datei auch drinsteht, dass er heruntergefahren ist.

Insofern sollte das dann (theoretisch) schon funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

stimmt, du könntest die Erstellung der Datei umgehen, indem du direkt

find "xyz" < mysqladmin status

if errorlevel....

machst.

Der "Umweg" über die Datei wird erst nötig, wenn du die Ausgabe nacheinender auf mehrere Suchstrings überprüfen willst. So könntest du aber anhand der Ausgabe (bzw. der Fehlermeldung) unterscheiden, ob der Webserver läuft:


mysqladmin status > %temp%\status.txt


find "Alles-OK-Meldung" < %temp%\status.txt

if errorlevel 1 goto ende

rem alles ok


find "Fehlermeldung" < %temp%\status.txt

if errorlevel 1 goto webstart

rem wenn der Fehlermeldung nicht erkannt wurde, läuft der mysqld und muss beendet werden

rem ansonsten wird der Befehl zum Beenden übersprungen


mysqladmin shutdown


:webstart

start.exe


:ende

echo off schaltet übrigens nicht die Fehlermeldungen ab, sondern bewirkt, dass die Zeilen deiner Batchdatei beim Abarbeiten nicht (zusätzlich zu den normalen Programmausgaben) angezeigt werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...