Bash Snippet / anregungen für Munin gesucht

Zeroflow

Commander
Registriert
Juli 2006
Beiträge
2.096
Hi Leute!

Ich bräuchte ein wenig hilfe bei einem Bash (oder perl) script.
Ziel ist es, Statistiken eines Minecraft Servers aus mySQL auslesen & in munin darzustellen.

SQL Query oder Munin syntax ist für mich kein Problem, nur stehe ich jetzt bei dem serverseitigen script an.

IST:
Ich bekomme die Werte für den Graph aus mySQL, Format ist:
key value full name

Probleme:
- die erste Zeile aus dem String den ich von mysql bekomme entfernen (header)
Probiert habe ich es mit "RESULT=`echo $RESULT | tail -n +2` nur das gibt mir immer nur einen leeren string.
Das könnte sein da $RESULT nur line endings mit \n hat.

Den rest sollte ich selbst schaffen können, munin ist nicht wirklich quantenphysik allerdings der vollständigkeit halber:
- per regex jede line aufsplitten "(\S+)\s+(\S+)\s+(\S+.*)" wäre ein schneller vorschlag von mir
- mit den resultaten aus dem regEx die munin formate ausgeben (welche graphs, welche intere namen, welche formattierung)
- die values ausgeben im format key.value

Mein Problem ist jetzt nur:
Wie kriege ich vom mySQL result welches in einer variable ist die erste zeile weg?
Denn sobald das erledigt ist müsste ich ja mit : "for ln in $QUERY;do <regex magic mit $ln>;done" schön an alle werte kommen.

Wäre nett wenn jemand wüsste wie man dieses teilproblem lösen könnte.

MfG zeroflow
 
Wie es aussieht scheinst du ja bisher nur Bash versucht zu haben.
Einfacher wäre das ganz mit Perl zu realisieren. Hier kannst du die Abfragen mit DBI absenden, kannst das Ergebnis dann Zeilenweise durchlaufen und die Zeile direkt aufsplitten und verarbeiten.
Hier mal ein Beispiel:
Code:
#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my $db_host="SERVERADDR";
my $db_name="DATENBANK";
my $db_user="USER";
my $db_pw="PASSWORT";

my $dbh = DBI->connect("DBI:mysql:database=$db_name;host=$db_host", $db_user, $db_pw) or die $DBI::errstr;

my $sth = $dbh->prepare('SELECT * FROM tabelle');
$sth->execute();

while ( my ($nr, $loginname ,$password ,$uid ,$gid ,$comment ,$homedir, $commandinterpreter) = $sth->fetchrow_array()) 
{
	printf("%11i | %-20s | %-2s | %7i | %7i | %-40s | %-30s | %-30s\n",$nr , $loginname ,$password ,$uid ,$gid ,$comment ,$homedir, $commandinterpreter)
}
$dbh->disconnect();

EDIT: Benötigt wird halb DBI und der DBD für MySQL
 
Vielen Dank!

Schaut auch viel übersichtlicher aus als mit bash.
Ich werds mal probieren und mich dann mit dank oder fragen melden ;)
Ergänzung ()

Vielen Dank nochmal!

Hat super toll funktionert!
 
Zurück
Oben