Problem mit Linux (openWRT) shell script Im Unterforum Hardware, Betriebssysteme, Programmiersprachen - Beschreibung: Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht.
Elektronik- und Elektroforum Forum Index >>
Hardware, Betriebssysteme, Programmiersprachen
Hardware, Betriebssysteme, Programmiersprachen : Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht. |
Autor |
Problem mit Linux (openWRT) shell script |
|
|
|
|
BID = 865420
wulf Schreibmaschine
![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif)
Beiträge: 2246 Wohnort: Bozen
|
|
Hoffentlich gibt es hier einige gute Shell (/bin/sh) Programmierer.
Ich habe folgendes Problem:
Ich soll ein Skript schreiben um Interfaces up und down zu bringen. Um das Interfaces zu starten rufe ich ein, vom Betriebssystem, vorgegebenes Skript auf. Das vorgegebene Skript startet den DHCP Client udhcpc. Dieser allerdings gibt mit keinen command prompt zurück (terminiert nicht). Somit bleibt das Skript, und damit auch meines, dort hängen. Der command prompt kommt nur nach Eingabe eines "Enters" zurück. (udhcpc startet eventuell einen deamon?)
Dies wäre nicht weiters schlimm wenn mein Skript manuell aufgerufen wird. Aber das Skript soll auch nur Teil von einem anderen sein und deshalb ist das so nicht akzeptabel. Kennt jemand die Lösung?
Mein Skript:
Code : |
#!/bin/sh
#
if [ $# == 1 ]; then
if [ $1 == "up" ]; then
. /etc/functions.sh
include /lib/network
scan_interfaces
setup_interface eth1
elif [ $1 == "down" ]; then
ifconfig eth1 down > /dev/null
return "$?"
else
echo "parameter \"up\" brings the interface up, \"down\" brings the interface down"
exit 2
fi
else
echo "parameter \"up\" brings the interface up, \"down\" brings the interface down"
exit 2
fi
|
|
Relevanter Teil von setup_interface(). Dieses Skript soll darf verändert werden.
Code : |
$DEBUG eval udhcpc -t 0 -i "$iface" \
${ipaddr:+-r $ipaddr} \
${hostname:+-H $hostname} \
${clientid:+-c $clientid} \
${vendorid:+-V $vendorid} \
-b -p "$pidfile" $broadcast \
${dhcpopts:- -O rootpath -R &}
|
|
Die Optionen von udhcpc:
Code : |
root äht OpenWrt:~# (automatisch editiert wegen spamgefahr) udhcpc --help
BusyBox v1.15.3 (2011-11-24 18:38:13 CET) multi-call binary
Usage: udhcpc [-Cfbnqtvo] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]
[-p pidfile] [-r IP] [-s script] [-O dhcp-option]...
-V,--vendorclass=CLASSIDVendor class identifier
-i,--interface=INTERFACEInterface to use (default eth0)
-H,-h,--hostname=HOSTNAMEClient hostname
-c,--clientid=CLIENTIDClient identifier
-C,--clientid-noneSuppress default client identifier
-p,--pidfile=fileCreate pidfile
-r,--request=IPIP address to request
-s,--script=fileRun file at DHCP events (default /usr/share/udhcpc/default.script)
-t,--retries=NSend up to N request packets
-T,--timeout=NTry to get a lease for N seconds (default 3)
-A,--tryagain=NWait N seconds (default 20) after failure
-O,--request-option=OPTRequest DHCP option OPT (cumulative)
-o,--no-default-optionsDo not request any options (unless -O is also given)
-f,--foregroundRun in foreground
-b,--backgroundBackground if lease is not immediately obtained
-S,--syslogLog to syslog too
-n,--nowExit with failure if lease is not immediately obtained
-q,--quitQuit after obtaining lease
-R,--releaseRelease IP on quit
|
|
Danke an alle die sich bemühen.
Grüße
Simon
_________________
Simon
IW3BWH |
|
BID = 865466
DonComi Inventar
![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif)
Beiträge: 8605 Wohnort: Amerika
|
|
Hallo Wulf,
Hängt man dem Aufruf ein Kaufmanns-Und & an, dann wird das entsprechende Programm gestartet, die Kontrolle wird aber sofort wieder an den aufrufenden Prozess, hier die interpretierende Shell, übergeben.
Alternativ kann man, wenn er ein "Enter" benötigt, sowas machen wie
Befehl << EOM
EOM
_________________
|
|
BID = 865473
clembra Inventar
![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif)
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Hallo wulf,
wenn die Hilfe-Seite stimmt dann wurde wohl irgendwo dhcpopts gesetzt. Ansonsten hätte der udhcpc-Befehl bereits ein & am Ende und würde die übergeordnete Shell nicht blockieren.
Füge mal ein echo "dhcpopts: $dhcpopts" über dem udhcpc-Aufruf ein, dann sollte man es schnell heraus bekommen.
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 865714
wulf Schreibmaschine
![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif)
Beiträge: 2246 Wohnort: Bozen
|
Entschuldigt bitte die späte Antwort.
Das & war des Problems Lösung. Und danach noch ein paar Sekunden sleep um etwas Zeit für den DHCP Lease.
Trotz allem hab ich jetzt, schon zum dritten Mal, mein Skript komplett umgeschrieben und nutze jetzt das UCI (unified configuration interface).
@Clembra: Ich hab mir jetzt die die dhcpopts nicht genauer angeschaut da udhcpc immer blockiert wenn nicht explizit -q (quit after lease) angehängt wurde. Und das Skript des Betriebssystems soll ja nicht geändert werden.
Ich danke euch vielmals für eure Bemühungen!
Falls es euch interessiert hier das neue Skript.
Jetzt überlasse ich nichts mehr den Funktionen in /lib/network sondern mache alles selbst.
Code : |
#!/bin/sh
#
if [ $# == 1 ]; then
if [ $1 == "up" ]; then
ifconfig eth1 up
proto=`uci get network.wan.proto`
if [ $proto == "static" ]; then
addr=`uci get network.wan.ipaddr`
mask=`uci get network.wan.netmask`
gateway=`uci get network.wan.gateway`
ifconfig eth1 $addr netmask $mask
route add default gw $gateway
elif [ $proto == "dhcp" ]; then
udhcpc -i eth1 -q
elif [ $proto == "pppoe" ]; then
### TO DO ###
else
exit 1
fi
exit 0
elif [ $1 == "down" ]; then
ifconfig eth1 down
exit 0
else
echo "parameter \"up\" brings the interface up, \"down\" brings the interface down"
exit 2
fi
else
echo "parameter \"up\" brings the interface up, \"down\" brings the interface down"
exit 2
fi
|
|
[ Diese Nachricht wurde geändert von: wulf am 3 Jan 2013 10:32 ]
|
BID = 865737
clembra Inventar
![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif) ![](/phpBB/images/stars/star.gif)
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Der Punkt ist der, dass wenn dhcpopts leer ist, der Teil nach dem :- zählt, und da steht/stand einmal -R (release on quit) und das gesuchte &.
Aber mit der Radikalkur geht es ja auch
_________________
Reboot oder be root, das ist hier die Frage.
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 18 Beiträge im Durchschnitt pro Tag heute wurden bisher 2 Beiträge verfasst © x sparkkelsputz Besucher : 181976656 Heute : 278 Gestern : 4920 Online : 413 8.9.2024 2:49 1 Besucher in den letzten 60 Sekunden alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0676391124725
|