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 Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 11 2024  22:59:18      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


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



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



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



Beiträge: 5404
Wohnort: Weeze / Niederrhein
ICQ Status  

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



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



Beiträge: 5404
Wohnort: Weeze / Niederrhein
ICQ Status  

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.


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


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 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 35 Beiträge verfasst
© x sparkkelsputz        Besucher : 182425855   Heute : 4902    Gestern : 5459    Online : 393        29.11.2024    22:59
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0292799472809