PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Server in einem Startscript zusammenfassen



Spongebob
29.12.14, 16:46
Hallo zusammen,

ich hoffe ich habe hier den richtigen Ort für mein Problem gefunden...

Ich habe einen Rootserver, auf dem zur Zeit mehrere Gameserver laufen. [Minecraft Server welche über einen Bungeecordserver verbunden sind]
Diese haben alle in ihrem Ordner eine start.sh welche ungefähr so aussieht:


screen -A -m -d -S SERVERNAME java -Xmx2048M -Xms2048M -jar spigot.jar


Die stop.sh sieht so aus:


screen -S SERVERNAME -X quit


Ich würde die Startscripte und auch die Stopscripte gerne so verbinden, dass man zum Starten und Stoppen des Servernetzwerks nur eine Datei ausführen muss...
Perfekt wäre es natürlich wenn man die Server auch einzeln Starten/Stoppen könnte, aber eben nur ein "Programm" dafür hat. <- Keine Ahnung ob man sowas überhaupt umsetzen kann...
Ich freue mich auf eure Antworten :)

Mit freundlichen Grüßen
Spongebob

nopes
29.12.14, 17:39
öhm reicht nicht was in der Art?
Start:
#!/bin/bash

case "$1" in
'start')
/pfad/zum/ersten/start/skript/start.sh
/pfad/zum/zweiten/start/skript/start.sh
#...
/pfad/zum/nten/start/skript/start.sh
;;

'stop')
/pfad/zum/ersten/stop/skript/stop.sh
/pfad/zum/zweiten/stop/skript/stop.sh
#...
/pfad/zum/nten/stop/skript/stop.sh
;;

'restart')
$0 stop
#5 sekunden pause
sleep 5
$0 start
;;

*)
echo "usage: $0 { start | stop | restart }"
;;

esac
exit 0Skript habe ich mir von hier geklaut - http://www.der-taegliche-admin.de/2010/06/25/eigenes-start-stop-shell-script-erstellen/
Jedenfalls kannst du die Server dann so starten/stopen:
# start
/pfad/zum/neuen/skript/neuer_skript start
# stop
/pfad/zum/neuen/skript/neuer_skript stop
# neu starten
/pfad/zum/neuen/skript/neuer_skript restartAußerdem kannst du dieses Skript auch direkt ins Init-System einbauen, dann werden die Server direkt beim booten gestartet bzw. beim Herunterfahren beendet. Leider gibt es inzwischen ziemlich viele Init-System (http://de.wikipedia.org/wiki/Init), so dass keine generelle Anleitung mehr möglich ist...

Spongebob
29.12.14, 17:45
Danke für die schnelle Antwort. Ich werde das gleich mal direkt ausprobieren und berichten :)

Spongebob
29.12.14, 18:28
öhm reicht nicht was in der Art?
Start:
#!/bin/bash

case "$1" in
'start')
/pfad/zum/ersten/start/skript/start.sh
/pfad/zum/zweiten/start/skript/start.sh
#...
/pfad/zum/nten/start/skript/start.sh
;;

'stop')
/pfad/zum/ersten/stop/skript/stop.sh
/pfad/zum/zweiten/stop/skript/stop.sh
#...
/pfad/zum/nten/stop/skript/stop.sh
;;

'restart')
$0 stop
#5 sekunden pause
sleep 5
$0 start
;;

*)
echo "usage: $0 { start | stop | restart }"
;;

esac
exit 0Skript habe ich mir von hier geklaut - http://www.der-taegliche-admin.de/2010/06/25/eigenes-start-stop-shell-script-erstellen/
Jedenfalls kannst du die Server dann so starten/stopen:
# start
/pfad/zum/neuen/skript/neuer_skript start
# stop
/pfad/zum/neuen/skript/neuer_skript stop
# neu starten
/pfad/zum/neuen/skript/neuer_skript restartAußerdem kannst du dieses Skript auch direkt ins Init-System einbauen, dann werden die Server direkt beim booten gestartet bzw. beim Herunterfahren beendet. Leider gibt es inzwischen ziemlich viele Init-System (http://de.wikipedia.org/wiki/Init), so dass keine generelle Anleitung mehr möglich ist...

Hmmm, hab das gerade mal so gemacht:



#!/bin/bash

case "$1" in
'start')
/home/bungeecord/start.sh
/home/lobby/start.sh
;;

'stop')
/home/bungeecord/stop.sh
/home/lobby/stop.sh
;;

'restart')
$0 stop
sleep 30
$0 start
;;

*)
echo "usage: $0 { start | stop | restart }"
;;

esac
exit 0




Habe mir auch mit
chmod +x Steuerung.sh die Rechte gegeben, glaube ich... Trotzdem bekomme ich keinen Screen wenn ich
./Steuerung.sh start eingebe. Ich bekomme garkeine Antwort von der Konsole...

nopes
29.12.14, 19:32
hmm pack einfach mal ein paar debug echos rein, etwa so:
#!/bin/bash

echo "\$1 ist '${1}'"
case "$1" in
'start')
echo "starte bungeecord"
/home/bungeecord/start.sh
echo "starte lobby"
/home/lobby/start.sh
;;

'stop')
echo "stope bungeecord"
/home/bungeecord/stop.sh
echo "stope lobby"
/home/lobby/stop.sh
;;

'restart')
$0 stop
sleep 30
$0 start
;;

*)
echo "usage: $0 { start | stop | restart }"
;;

esac
echo "ende"
exit 0

Spongebob
29.12.14, 19:37
hmm pack einfach mal ein paar debug echos rein, etwa so:
#!/bin/bash

echo "\$1 ist '${1}'"
case "$1" in
'start')
echo "starte bungeecord"
/home/bungeecord/start.sh
echo "starte lobby"
/home/lobby/start.sh
;;

'stop')
echo "stope bungeecord"
/home/bungeecord/stop.sh
echo "stope lobby"
/home/lobby/stop.sh
;;

'restart')
$0 stop
sleep 30
$0 start
;;

*)
echo "usage: $0 { start | stop | restart }"
;;

esac
echo "ende"
exit 0

Wo soll denn die Datei dann am besten landen?

Gruß Spongebob

nopes
29.12.14, 19:47
üblicherweise in /etc/init.d

Spongebob
29.12.14, 20:28
Leider funktioniert das auch nicht... Ich bekomme zwar

$1 ist 'start'
starte bungeecord
starte lobby
ende
von der Konsole, mehr passiert aber nicht. Die Server starten nicht und es wird folglich auch kein Screen gestartet.....

Spongebob
29.12.14, 23:42
So, nach, gefühlt, jahrelangem herumprobieren habe ich eine halbwegs funktionale Lösung gefunden:


#!/bin/bash
INSTANZ="Steuerung"
BPDIR1=/home/bungeecord/
BPDIR2=/home/lobby/
Pidfile=/home/Steuerung.pid

if [ -f $Pidfile ]
then
Pid=`cat $Pidfile`
fi

case "$1" in
'start')
if [ -f $Pidfile ] ; then
if test `ps -e | grep -c $Pid` = 1; then
echo "$INSTANZ wird nicht ausgeführt - Anwendung läuft bereits mit PID: $Pid"
else
echo "Starte Bungee $INSTANZ"
cd $BPDIR1
nohup ./start.sh &> /dev/null &
echo $! > $Pidfile
echo "Starte Lobby $INSTANZ"
cd $BPDIR2
nohup ./start.sh &> /dev/null &
echo $! > $Pidfile
fi
else
echo "Starte Bungee $INSTANZ"
cd $BPDIR1
nohup ./start.sh &> /dev/null &
echo $! > $Pidfile
echo "Starte Lobby $INSTANZ"
cd $BPDIR2
nohup ./start.sh &> /dev/null &
echo $! > $Pidfile
fi
;;

'stop')
if [ -f $Pidfile ] ; then
echo "stopping $INSTANZ"
cd $BPDIR1
nohup ./stop.sh &> /dev/null &
echo $! > $Pidfile
echo "stopping $INSTANZ"
cd $BPDIR2
nohup ./stop.sh &> /dev/null &
echo $! > $Pidfile
else
echo "Kann $INSTANZ nicht stoppen - die Pidfile wurde nicht gefunden!"
fi
;;

'restart')
$0 stop
sleep 30
$0 start
;;

*)
echo "usage: $0 { start | stop | restart}"
;;

esac
exit 0

Das Ganze befindet sich im /home-Verzeichnis und funktioniert mit den Befehlen ./Steuerung.sh start/stop/restart...

Gibt es nicht einen leichteren Weg? Ich finde es relativ aufwendig einen neuen Server hinzuzufügen....

Freue mich auf eure Antworten

Grüße
Spongebob

nopes
30.12.14, 00:12
Ich sehe das so, du weißt nun "wie es geht" der Rest ergibt sich dann eh :)
Ansonsten:
Denk mal hier drüber nach:
#!/bin/bash
basis_pfad="/home/nopes/meine_minecraft_server/"
server_pfade=("${basis_pfad}foo" "${basis_pfad}bar" "${basis_pfad}etc")
for server_pfad in ${server_pfade[@]}; do
echo "\$server_pfad =${server_pfad}"
done
exit 0
Und http://www.tldp.org/LDP/Bash-Beginners-Guide/html/index.html ist immer einen bzw. mehrere ;) Blicke wert!

[edit]Nachtrag, falls du dich über ${var} wunderst - siehe hier (http://unix.stackexchange.com/questions/4899/var-vs-var-and-to-quote-or-not-to-quote); umständlicher aber sicherer

Spongebob
30.12.14, 00:26
So langsam verstehe ich was das bedeutet... Bei den Serverpfaden soll ich wahrscheinlich jeden Server einzeln "verlinken". Nur dann später bei der Handlung, das versteh ich noch nicht. Wenn ich dieses Script jetzt ausführe, was genau passiert denn dann eigentlich :D?

Grüße
Spongebob

nopes
30.12.14, 00:48
so verständlicher?

#!/bin/bash
basis_pfad="/home/nopes/meine_minecraft_server/"
Pidfile="/var/run/meine_minecraft_Steuerung.pid" # pid gehören in /var/run verwahrt
server_pfade=("${basis_pfad}foo" "${basis_pfad}bar" "${basis_pfad}etc")

for server_pfad in ${server_pfade[@]}; do
echo "starte instanz in '${server_pfad}'"
cd "$server_pfad "
nohup ./start.sh &> /dev/null &
#echo $! > $Pidfile
# ah und noch was, wenn ich da jetzt so drüber schau, hier hast du einen bug ein geskripptet
# du hast ja mehrere server - die haben aber keine eigene pid-datei!!!
done
echo "bye"
exit 0
Idee ist, das for in den entsprechenden cases (start,stop) zu verwenden

[edit]
Aber wie im Kommentar des Skripts ersichtlich ist, so richtig gut ist der noch nicht. Du kannst halt nicht prüfen, ob der eine oder andere läuft, also sauberer:
schreibe je Server einen Start/Stop Skript und implementiere dabei status
schreibe anschließend einen weiteren Skript, der zur Verwaltung dient; falls das dann überhaupt noch notwendig ist - jedenfalls keep fighting ;)

[edit2]falls du eine Verwaltung willst, einfacher und dennoch dynamischer Ansatz ist:
lege alle Start/Skripte in einem eigenen "Verzeichnis" ab, keine anderen Dateien sind in diesem Verzeichnis!
"linke" die Skripte nach /etc/init.d - wie erwähnt "Init System", wegen Autostart und so
im Verwakltungs Skript erzeugst du ein Feld aus den Dateinamen in dem "Verzeichnis"
der Rest sollte klar sein

Spongebob
30.12.14, 01:19
so verständlicher?

#!/bin/bash
basis_pfad="/home/nopes/meine_minecraft_server/"
Pidfile="/var/run/meine_minecraft_Steuerung.pid" # pid gehören in /var/run verwahrt
server_pfade=("${basis_pfad}foo" "${basis_pfad}bar" "${basis_pfad}etc")

for server_pfad in ${server_pfade[@]}; do
echo "starte instanz in '${server_pfad}'"
cd "$server_pfad "
nohup ./start.sh &> /dev/null &
#echo $! > $Pidfile
# ah und noch was, wenn ich da jetzt so drüber schau, hier hast du einen bug ein geskripptet
# du hast ja mehrere server - die haben aber keine eigene pid-datei!!!
done
echo "bye"
exit 0
Idee ist, das for in den entsprechenden cases (start,stop) zu verwenden

[edit]
Aber wie im Kommentar des Skripts ersichtlich ist, so richtig gut ist der noch nicht. Du kannst halt nicht prüfen, ob der eine oder andere läuft, also sauberer:
schreibe je Server einen Start/Stop Skript und implementiere dabei status
schreibe anschließend einen weiteren Skript, der zur Verwaltung dient; falls das dann überhaupt noch notwendig ist - jedenfalls keep fighting ;)

[edit2]falls du eine Verwaltung willst, einfacher und dennoch dynamischer Ansatz ist:
lege alle Start/Skripte in einem eigenen "Verzeichnis" ab, keine anderen Dateien sind in diesem Verzeichnis!
"linke" die Skripte nach /etc/init.d - wie erwähnt "Init System", wegen Autostart und so
im Verwakltungs Skript erzeugst du ein Feld aus den Dateinamen in dem "Verzeichnis"
der Rest sollte klar sein

Okay, vielen lieben Dank :)

So ein Start/Stop/Status-Skript bekomme ich für jeden Server hin, glaube ich. Aber Naja, ich hatte mich bereits an einer verlinken versucht, allerdings gingen mir schnell die Ideen aus. Mein Problem ist, dass ich nicht weiß wie ich die Dateien dann "zusammenfügen" kann... Man braucht ja sowas wie ein "und" - Befehl, den habe ich nicht. Wäre wirklich super wenn dir auch dazu was einfällt :)
Dann würde ich das später direkt mal auf dem Server testen :D
Liebe grüße
Spongebob

nopes
30.12.14, 01:43
mkdir /srv/meine_minecraft_server
mkdir /srv/meine_minecraft_server/server_1
mkdir /srv/meine_minecraft_server/server_2
mkdir /srv/meine_minecraft_server/server_3
# nun mache ich drei start/skripte im geiste
nano /srv/meine_minecraft_server/server_1/management.sh
chmod u+x /srv/meine_minecraft_server/server_1/management.sh
nano /srv/meine_minecraft_server/server_2/management.sh
chmod u+x /srv/meine_minecraft_server/server_2/management.sh
nano /srv/meine_minecraft_server/server_3/management.sh
chmod u+x /srv/meine_minecraft_server/server_3/management.sh
# jetzt linke ich die
ln -s /srv/meine_minecraft_server/server_1/management.sh /etc/init.d/mein_meincraft_server1
ln -s /srv/meine_minecraft_server/server_2/management.sh /etc/init.d/mein_meincraft_server2
ln -s /srv/meine_minecraft_server/server_3/management.sh /etc/init.d/mein_meincraft_server3
# jetzt packe ich die in den init prozess (booten und so) - bei mir ist das init system sysv, also
sysv-rc-confDann fehlt noch der Management-Skript, der dann aber beliebig komplex werden kann :) - jedenfalls ist "mein Startpunkt/Idee" eine "dynamische Schleife" über die Dateien in einem Verzeichnis:

# ganz grob
#!/bin/bash
cd /wohin/auch/immer
for datei in *
do
echo "\$datei=${datei}"
# dann halt komplexität einführen so in der art
# wenn das Kommando: $datei status == "läuft", dann server als gut markieren
# sonst ...
doneKann dann von der Sache her beliebig komplex werden, siehe die bereits erwähnten Verweise - oder du machst einfach einen Skript pro Server ;)

Spongebob
30.12.14, 10:28
mkdir /srv/meine_minecraft_server
mkdir /srv/meine_minecraft_server/server_1
mkdir /srv/meine_minecraft_server/server_2
mkdir /srv/meine_minecraft_server/server_3
# nun mache ich drei start/skripte im geiste
nano /srv/meine_minecraft_server/server_1/management.sh
chmod u+x /srv/meine_minecraft_server/server_1/management.sh
nano /srv/meine_minecraft_server/server_2/management.sh
chmod u+x /srv/meine_minecraft_server/server_2/management.sh
nano /srv/meine_minecraft_server/server_3/management.sh
chmod u+x /srv/meine_minecraft_server/server_3/management.sh
# jetzt linke ich die
ln -s /srv/meine_minecraft_server/server_1/management.sh /etc/init.d/mein_meincraft_server1
ln -s /srv/meine_minecraft_server/server_2/management.sh /etc/init.d/mein_meincraft_server2
ln -s /srv/meine_minecraft_server/server_3/management.sh /etc/init.d/mein_meincraft_server3
# jetzt packe ich die in den init prozess (booten und so) - bei mir ist das init system sysv, also
sysv-rc-confDann fehlt noch der Management-Skript, der dann aber beliebig komplex werden kann :) - jedenfalls ist "mein Startpunkt/Idee" eine "dynamische Schleife" über die Dateien in einem Verzeichnis:

# ganz grob
#!/bin/bash
cd /wohin/auch/immer
for datei in *
do
echo "\$datei=${datei}"
# dann halt komplexität einführen so in der art
# wenn das Kommando: $datei status == "läuft", dann server als gut markieren
# sonst ...
doneKann dann von der Sache her beliebig komplex werden, siehe die bereits erwähnten Verweise - oder du machst einfach einen Skript pro Server ;)

Ich möchte mich dann gleich an die Skripte machen, habe aber noch ein paar Fragen dazu :)
Kann man anstelle der Pidfiles nicht auch überprüfen ob der Screen mit dem Namen "BlaBa" läuft? Denn wenn der Server läuft, läuft auch der Screen. Wenn er aus ist, ist auch der Screen aus. Klingt für mich etwas sicherer als Überprüfung, oder? Wo die einzelnen Skripte liegen, ist doch eigentlich egal, oder? Wenn ich die in meinem Managementskript zusammenfüge, wird doch eh der Pfad angegeben...

Da ich selbst nur ein bisschen JavaScript kann, und auch nur in dieser Programmiersprache "denken" kann, hatte ich für das Management Skript an sowas gedacht:
Jetzt mal sehr stark vereinfacht, ich hoffe mein Plan wird trotzdem klar:

ZÄHLER=1
wenn ([Benutzereingabe "Start"])
for ([ZÄHLER<SERVERANZAHL])
wenn ([ScreenNrZÄHLER NICHT läuft])
führe aus: "VariabelFürDenPfadWoAlleStart/StopskripteLiegen"ZÄHLER.sh
ZÄHLER=ZÄHLER+1
System.Outprintl.("Server Nr. ZÄHLER wurde GESTARTET")
else
ZÄHLER=ZÄHLER+1
System.Outprintl.("Server Nr. ZÄHLER LÄUFT BEREITS")

Jetzt müsste man das nur noch irgendwie in Bash übersetzen....
Für Stop dann genauso, nur beim Status weiß ich nicht so recht wie ich den immer einzeln abfragen kann. Wäre ja cool wenn man eine schöne "Darstellung" für den Status der Server bekommt, weißt du da mehr?

Liebe Grüße
Spongebob

DrunkenFreak
30.12.14, 11:01
Ich glaube, ein Server ist nicht das richtige für dich. Das sind rudimentäre Skripte, die man aus dem FF beherrschen sollte. Das ganze kannst du hier (http://www.tldp.org/LDP/abs/html/) nachlesen, wie du genau so ein Skript schreibst.

Spongebob
30.12.14, 12:21
Ich glaube, ein Server ist nicht das richtige für dich. Das sind rudimentäre Skripte, die man aus dem FF beherrschen sollte. Das ganze kannst du hier (http://www.tldp.org/LDP/abs/html/) nachlesen, wie du genau so ein Skript schreibst.

NaJa, sonst lerne ich es ja nie... :) Aber ich würde es wirklich begrüßen wenn du mir beispielhaft ein solch rudimentäres Skript vorstellen würdest. Mit Beispielen lernt man ja immernoch am besten ;)

DrunkenFreak
30.12.14, 14:11
if [ $foo == $bar ]
then
for name in $count
do
echo do foo bar
do_foo_bar
done
else
echo nothing to do
fi

Spongebob
01.01.15, 20:27
So, ich habe jetzt nochmal ein bisschen gebastelt und das ist das Ergebnis: http://pastebin.com/5CBUEpNC .

Problem ist jetzt noch, dass egal welche Eingabe man macht, immer die selbe Antwort kommt:


27493.bungeecord (01.01.2015 18:17:05) (Detached)
*** BungeeCord Server ist gestartet

27494.lobby (01.01.2015 18:17:05) (Detached)
*** Lobbyserver ist gestartet

20234.Bauen (01.01.2015 15:14:31) (Detached)
*** Vorbauserver ist gestartet

./Projekt2.sh: Zeile 135: Syntax Fehler: Unerwartetes Dateiende.
Warum ist das so? :)

Mit freundlichen Grüßen

nopes
01.01.15, 21:05
ja denke da mal drüber nach, insbesondere über den formellen Aufbau von Kontrollstrukturen

Spongebob
01.01.15, 21:42
ja denke da mal drüber nach, insbesondere über den formellen Aufbau von Kontrollstrukturen

:confused: :c Ich bin da am Ende meiner Fähigkeiten :c

nopes
01.01.15, 22:35
prüf mal die enden, also die fis...

[edit] und denk auch mal über das nach - bzw. ich würde dir raten das zu ändern:
willst du wirklich = und == mischen - ist zwar ok, denn die tun beide das gleich aber schön ist das nicht
warum sind immer alle zu faul Quotes drum zulegen, der Gleichoperator ist bei Bash nun mal für Strings und hat nichts mit Arithmetik zu tun

Also Arbeite bei Texten immer mit Quotes (am besten auf beiden Seiten), einfach nur damit klar ist, was "Phase" ist. Vermeide einen Mischmasch aus = und == - nimm am besten ==, einfach weil es so üblich ist (außer die wärst Pascal Programmierer ;))

Weiterer Hinweis, bei Javascript hast du doch bestimmt auch schon mal eine Funktion geschrieben, das geht auch in Bash und würde deinen Code deutlich einkürzen, da ziemlich viele "Duplikate" drin sind.



Das sind aber wirklich nur Anmerkungen. Ich finde es so schon sehr viel besser als ursprünglich...

Spongebob
01.01.15, 23:18
prüf mal die enden, also die fis...

[edit] und denk auch mal über das nach - bzw. ich würde dir raten das zu ändern:
willst du wirklich = und == mischen - ist zwar ok, denn die tun beide das gleich aber schön ist das nicht
warum sind immer alle zu faul Quotes drum zulegen, der Gleichoperator ist bei Bash nun mal für Strings und hat nichts mit Arithmetik zu tun

Also Arbeite bei Texten immer mit Quotes (am besten auf beiden Seiten), einfach nur damit klar ist, was "Phase" ist. Vermeide einen Mischmasch aus = und == - nimm am besten ==, einfach weil es so üblich ist (außer die wärst Pascal Programmierer ;))

Weiterer Hinweis, bei Javascript hast du doch bestimmt auch schon mal eine Funktion geschrieben, das geht auch in Bash und würde deinen Code deutlich einkürzen, da ziemlich viele "Duplikate" drin sind.



Das sind aber wirklich nur Anmerkungen. Ich finde es so schon sehr viel besser als ursprünglich...


Danke für die Mühe :)

Ich weiß leider nicht was genau bei den fi's falsch gelaufen ist :( Wenn ich am Ende nur eins statt zwei stehen lasse, bekomme ich als Ausgabe der Konsole nur noch:


./Projekt2.sh: Zeile 131: Syntax Fehler: Unerwartetes Dateiende.

Vorher habe ich ja noch mein schönes



Auswahlmenue
-------------------------------------------------------------
Bitte treffen Sie Ihre Auswahl:

1. Bungeecord starten
2. Lobbyserver starten
3. Vorbauserver starten
4. Alle Server starten

5. Bungeecord stoppen
6. Lobbyserver stoppen
7. Vorbauserver stoppen
8. Alle Server stoppen

9. Bendet das Script ohne etwas auszufuehren
================================================== =========

bekommen und durfte eine Auswahl treffen.... Woran liegt das? Was genau soll ich ändern? :)

Ich gucke mal dass ich das ganze, wenn es fertig ist, wie du sagst in eigene Methoden zu packen :) Deklariere ich die bei Bash denn genauso wie bei Java?!

Vielen lieben Dank nochmal für deine Antworten :)

nopes
01.01.15, 23:25
Luft holen und in den sauren Apfel beißen, ohne "selber üben" geht nichts, also siehe http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html Kapitel 11

Woran es genau liegt kann ich dir nicht sagen, so genau habe ich mir den Code auch nicht angesehen (werde ich auch nicht ;))

Spongebob
02.01.15, 00:09
Luft holen und in den sauren Apfel beißen, ohne "selber üben" geht nichts, also siehe http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html Kapitel 11

Woran es genau liegt kann ich dir nicht sagen, so genau habe ich mir den Code auch nicht angesehen (werde ich auch nicht ;))

Okay, danke trotzdem :D Werde morgen dann mal Kapitel 11 lesen, leider fehlte in den letzten Tagen die Zeit [möglicherweise auch die Lust :D] in den Kapiteln nach Lösungen für meine Probleme zu suchen :)

Liebe Grüße