Einfache bash scripte laufen nicht! z.B. Repeater Uhr einstellen

Fireball3

Mitglied
Mitglied seit
22 Dez 2005
Beiträge
286
Punkte für Reaktionen
0
Punkte
16
Hallo,
ich bin jetzt langsam am Verzweifeln.
Mein Repeater synct die Zeit nur wenn er lustig ist und ich habe mich
auf die Suche nach einer Abhilfe gemacht.
Gefunden habe ich diesen Thread
http://www.ip-phone-forum.de/showthread.php?t=75504&page=2
und die Lösung funktioniert auch.
Jetzt wollte ich das Ganze in ein Script packen und bei Bedarf laufen lassen.
Das Script auf /var/tmp/apache/gettime.sh soll so aussehen wie im Link oben:
Code:
#!/bin/ash
#Uhzeit holen und synchronisieren
wget -qO gettime.tmp http://www2.fh-sw.de/~moeno/date/
date `grep Uhrzeit gettime.tmp | sed -n 's/.* \([0-9]*\.[0-9]*\).*/\1/p'`
rm gettime.tmp
Problem 1:
Der Aufruf ./gettime.sh funktioniert schonmal nicht - warum?
Rechte mit chmod auf 744 gesetzt.
Die ./install.sh von FritzLoad funktioniert hingegen
Beide Dateien liegen in /var/tmp/apache/ (auf dem USB Stick)
Liegt das an der Definition der shell #!/bin/ash bzw. daran, dass es kein wget in /bin/ gibt?
wget ist im Paket von FritzLoad und liegt hier:
/var/tmp/apache/htdocs/FritzLoad/bin/wget

Problem2:
Die Zeile
Code:
wget -qO gettime.tmp http://www2.fh-sw.de/~moeno/date/
händisch in die shell geklopft liefert die gewünschte datei.
Aber das Skript aufgerufen mit
Code:
sh gettime.sh
liefert
Code:
wget: server returned error: HTTP/1.0 400 Bad Request
Was ist da los?:confused:

Hoffe jemand kann in das schwarze Loch hier eine Sonne reinwerfen.
Wenn's geht mit Erklärung!?

Danke
Fireball
 
hallo!

bei mir gehts:
Code:
# pwd
/var/tmp
# cat test.sh
#!/bin/ash
#Uhzeit holen und synchronisieren
wget -qO gettime.tmp http://www2.fh-sw.de/~moeno/date/
date `grep Uhrzeit gettime.tmp | sed -n 's/.* \([0-9]*\.[0-9]*\).*/\1/p'`
rm gettime.tmp

# ./test.sh
Wed Sep 30 08:41:44 CEST 2009
#

rufst du das villeicht aus dem apache auf? in dem falle können probleme mit den rechten auftretten: apache läuft ja standartmäßig unter ftpuser und nicht unter root.

außerdem wäre mehr infos in deiner signatur hilfreich, z.b. freetz? originafirmware? kernel?...

gruß
 
Vielleicht kommst Du erstmal mit einigen Informationen rüber.

Fangen wir mit dem Titel an: "Einfache bash scripte laufen nicht". Hast Du bash bei Dir installiert? Oder verwendest Du gar keine bash Skripte?
Der Aufruf ./gettime.sh funktioniert schonmal nicht - warum?
Was heißt "funktioniert nicht"?
Rechte mit chmod auf 744 gesetzt.
Hast das einen speziellen Grund? Welchen?
Die Zeile
Code:
wget -qO gettime.tmp http://www2.fh-sw.de/~moeno/date/
händisch in die shell geklopft liefert die gewünschte datei.
Aber das Skript aufgerufen mit
Code:
sh gettime.sh
liefert
Code:
wget: server returned error: HTTP/1.0 400 Bad Request

Statt bei wget mit -q alle Ausgaben zu unterdrücken, könntest Du versuchen, vom wget mehr Informationen zu bekommen. Außerdem das Skript aufrufen mit "sh -x gettime.sh"
 
Hallo,
zu Euren Fragen:
@radislav
Ich habe das Skript aus dem ../apache/ aufgerufen.
Der liegt ja auf dem USB Stick und ist somit auch leicht zugänglich für mich - deswegen dort. Warum gibts da Probleme? Wenn ich es in die shell direkt tippe
läuft es auch von da.
Signatur passe ich gleich noch an.
Bis auf das FritzLoad ist alles original.

@RalfFriedl
Ich meine batch oder wie nennt man das in der linux Fachsprache.
Die bash shell habe ich nicht installiert.

Funktioniert nicht heißt:
Code:
# pwd
/var/tmp/apache
# ls -l
-rwxrwxrwx    1 root     root       712312 Dec  9  2008 apache
drwxrwxrwx    2 root     root         4096 Sep 28 22:17 cgi-bin
drwxrwxrwx    2 root     root         4096 Sep 28 22:17 conf
-rwxrwxrwx    1 root     root          362 Sep 29 22:55 gettime.sh
drwxrwxrwx    3 root     root         4096 Sep 28 22:17 htdocs
-rwxrwxrwx    1 root     root         6692 Mar 25  2009 install.sh
drwxrwxrwx    2 root     root         4096 Sep 30 07:24 logs
# ./gettime.sh
-sh: ./gettime.sh: not found
Rechte mit chmod auf 744 gesetzt.
Damit die Datei ausführbar gemacht wird.
http://www.linux-services.org/shell/#SECTION00320000000000000000
Geht vielleicht auch mit weniger Rechten aber es sollte auch so laufen.

Statt bei wget mit -q alle Ausgaben zu unterdrücken, könntest Du versuchen, vom wget mehr Informationen zu bekommen. Außerdem das Skript aufrufen mit "sh -x gettime.sh"
Das ist richtig mit dem -q! Und die shell gesprächiger machen mit -x.
Soweit habe ich alles verstanden und es ist nachvollziehbar.

Ich habe jetzt die datei ins /var/tmp kopiert so wie radislav.
Code:
# pwd
/var/tmp
# cat gettime.sh
#!/bin/ash

#Uhzeit holen und synchronisieren

wget -qO gettime.tmp http://www2.fh-sw.de/~moeno/date/

date `grep Uhrzeit gettime.tmp | sed -n 's/.* \([0-9]*\.[0-9]*\).*/\1/p'`
rm gettime.tmp #
# ./gettime.sh
-sh: ./gettime.sh: not found
Was mache ich verkehrt???
Danke für Eure Geduld
Fireball
 
Ich habe das Skript aus dem ../apache/ aufgerufen.
Der liegt ja auf dem USB Stick und ist somit auch leicht zugänglich für mich - deswegen dort. Warum gibts da Probleme? Wenn ich es in die shell direkt tippe
läuft es auch von da.

du hast meine frage falsch verstanden, aber gleich richtig beatwortet :)
meine frage war, ob du es in der konsole aufrufst, oder in *.php mit hilfe von system("./gettime.sh");

ansonsten muss ich leider passen: sehr seltsam, dass es bei dir nicht geht :gruebel:
probiere vielleich noch den globalen aufruf, etwa so:
Code:
# sh /var/tmp/gettime.sh
 
Ich meine batch oder wie nennt man das in der linux Fachsprache.
Normalerweise nennt man es Shell Skript. bash (Bourne-again shell) ist eine konkrete Shell, die etliche Erweiterungen hat. Meine erste Vermutung, als ich den Titel gelesen hatte, war, daß Du irgendwelche Bash-Erweiterungen verwendest, die von der normalen Shell nicht unterstützt werden.
Code:
-rwxrwxrwx    1 root     root          362 Sep 29 22:55 gettime.sh
# ./gettime.sh
-sh: ./gettime.sh: not found
Damit die Datei ausführbar gemacht wird.
Hier sieht man, daß die Datei in Wirklichkeit den Mode 777 hat. Mode 744 kann auch Anwendungen haben, aber solange Du nicht weißt, was der Unterschied ist, ist 755 vermutlich besser. Das ist aber nicht der Grund für Dein Problem.

liegt ja auf dem USB Stick und ist somit auch leicht zugänglich für mich
Das ist vermutlich die Erklärung für Dein Problem. Ich gehe davon aus, daß Du die Datei mit einem Windows-Editor statt mit einem Linux-Editor erstellt hast. Du mußt Linux/UNIX Zeilenenden verwenden.
 
Nächster Versuch:
probiere vielleich noch den globalen aufruf, etwa so:
Ergebnis:
Code:
pwd
/var/tmp
# sh gettime.sh
wget: server returned error: HTTP/1.0 400 Bad Request
grep: gettime.tmp: No such file or directory
'ate: invalid date '
rm: cannot remove 'gettime.tmp': No such file or directory
O.K. kommt wieder der Fehler von wget aber der rest läuft bis auf
Code:
'ate
durch.

@RalfFriedl
ich habe dann größere Geschütze auffahren wollen - 777 - damit
es ja keine Rechteprobleme gibt!

Guter Hinweis von RalfFriedl mit dem Editor.
Das würde ich gerne gleich mal probieren.
Hast Du irgendeinen guten Editor zur Hand?
Sonst muss ich noch eine VI Schulung machen. :(

Wie müsste ich ggf. den Editor einstellen, wenn ich Linux-konform
bleiben soll?
Bin schon sehr gespannt.
 
Ich bin mir relativ sicher, daß Du eine FAT-Partition verwendest. Auf dieser kannst Du sowieso keine UNIX-Rechte speichern, daher brauchst Du es auch nicht zu versuchen.

Die Meldungen im obigen Beitrag deuten auch stark auf falsche Zeilenenden hin.

Um die Datei richtig zu erstellen, hast Du mehrere Möglichkeiten:
- Ausgabeumleitung "cat > Datei", dann den Inhalt über die Zwischenablage einfügen.
- vi, nano oder sonst einen Editor, der auf der Box läuft.
- Einen Editor, der unter Windwos läuft, aber trotzdem die richtigen Zusammenbrüche produziert. Es soll einen Editor "Notepad++" geben, der das kann und auch sonst gut sein soll.
 
So, da bin ich wieder :D!

Dateisystem auf dem Stick ist FAT32 - wie Du schon sagst,
sollten die Rechte da keine Rolex spielen - aber wenn's nicht funzt,
dann glaubt man an nix mehr. ;)

Ich hab mich jetzt doch an den VI gewagt und wie
schon vermutet, liegt es an den Zeilenumbrüchen.
Ein Windows/Dos erwartet den Carriage-Return und Linux nicht.
Dazu dieses:
Passage über Zeilen und Zeilenübrüche
http://www.bosold.de/linux/vi-edit.html

Schaut man sich im VI die Win/Dos Version der Datei an,
steht hinter jeder Zeile ein
Code:
^M
.
Das rausgeschmissen und es läuft wie geschmiert.:groesste:
Damit wäre das Problem gelöst.
Jetzt kann der Repeater sich auf etwas gefasst machen.
Herzlichen Dank Euch Beiden!

Kleine Frage zum Schluß:
Gibt es einen Befehl, der die Telne-Verbindung schließt?
Habe schon
Code:
exit, quit, bye
durch - gibt's da was?

Fireball
 
"exit" ist richtig! wenn man einfach das fenster schließt, wird die verbindung gehalten und evtl. erst nach timeout beendet: frist ein bisschen resoursen
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.