Hi,
ich schlage mich hier momentan mit einem init-skript rum und habe eine Verständnisfrage. Es geht um das skript /etc/init.d/boot.localfs. OS is SLES 11 SP2 64bit. Zum Verständnis habe ich eine Menge echos in das skript eingebaut.
Hier mal die entsprechenden Schnipsel:
############################### list_missed () { local dev line local mount_opts="-t $nofs,nonone -O no_netdev" echo -e "\nfunction list_missed, line 87, mount_opts= $mount_opts" echo -e "\nZeile 89: Jetzt wird gemounted: \n"
... } ##################################
################################## wait_for_udev () { local dev local -i timeout=1200
local missing=$(list_missed)
echo -e "\nfunction wait_for_udev, Zeile 114, missing: $missing" test -n "$missing" || return 0
echo -e 'Waiting for $missing (Zeile 118)' echo -e "\n"
echo -n "Waiting for $missing " while test $timeout -gt 0 ; do usleep 25000
... } ##################################
und
################################## case "$1" in start) ... wait_for_udev
... ##################################
Die entsprechende Ausgabe in /var/log/boot.msg sieht dann wie folgt aus:
################################## <notice -- Jun 12 18:04:05.263822000> boot.localfs start
function wait_for_udev, Zeile 114, missing: function list_missed, line 87, mount_opts= -t nonfs,nonfs4,nosmbfs,nocifs,noafs,noncpfs,nosysfs,noproc,nocgroup,nocpuset,nodevtmpfs,nodebugfs,nosecurityfs,no devpts,nopstore,nonone -O no_netdev
Zeile 89: Jetzt wird gemounted:
Zeile 89: line: /dev/vg_1/lv_1 on /virtuelle_maschinen type ext3 (rw,acl,user_xattr) Zeile 92: dev: /dev/vg_1/lv_1
Zeile 92: line: /dev/vg_1/lv_1 on /virtuelle_maschinen type ext3 (rw,acl,user_xattr)
... ###################################
Ich versteh das folgendermaßen:
Da die Maschine bootet, wird das Skript mit "start" aufgerufen. Da wird relativ früh die Funktion wait_for_udev aufgerufen. Dort kommt die Zeile "local missing=$(list_missed)". Ich versteh das so, daß die Funktion list_missed aufgerufen wird und per Kommandosubstitution das was list_missed rausschmeisst in der lokalen Variablen missing abgespeichert wird. In list_missed wird in der 3. Zeile "echo -e "\nfunction list_missed, line 87, mount_opts= $mount_opts"" ein Text und der Inhalt der Variablen mount_ops ausgegeben. Anschließend wird eine weitere Zeile Text ausgegeben. Die Funktion list_missed wird komplett abgearbeitet, anschließend wird zurück zu wait_for_udev gesprungen und dann die Zeile "echo -e "\nfunction wait_for_udev, Zeile 114, missing: $missing"" ausgegeben.
Wenn ich mir jetzt aber /var/log/boot.msg ansehe, entspricht der Output nicht meinem erwartetem Ablauf. list_missed wird IMHO VOR der Zeile "echo -e "\nfunction wait_for_udev, Zeile 114, missing: $missing"" aufgerufen. Also müssten die echos aus list_missed auch VOR ""\nfunction wait_for_udev, Zeile 114, missing: $missing"" ausgegeben werden.
Werden sie aber nicht. Stattdessen sieht es aus, als ob nach "local missing=$(list_missed)" weiter wait_for_udev abgearbeitet wird und erst mit einer Verzögerung list_missed abgearbeitet wird.
Any ideas ?
Bernd
-- Bernd Lentes
Systemadministration Institut für Entwicklungsgenetik Gebäude 35.34 - Raum 208 HelmholtzZentrum münchen bernd.lentes@helmholtz-muenchen.de phone: +49 89 3187 1241 fax: +49 89 3187 2294 http://www.helmholtz-muenchen.de/idg
Wer nichts verdient außer Geld verdient nichts außer Geld
Helmholtz Zentrum München Deutsches Forschungszentrum für Gesundheit und Umwelt (GmbH) Ingolstädter Landstr. 1 85764 Neuherberg www.helmholtz-muenchen.de Aufsichtsratsvorsitzende: MinDir´in Bärbel Brumme-Bothe Geschäftsführer: Prof. Dr. Günther Wess Dr. Nikolaus Blum Dr. Alfons Enhsen Registergericht: Amtsgericht München HRB 6466 USt-IdNr: DE 129521671
Bernd schrieb:
-----Original Message----- From: Lentes, Bernd [mailto:bernd.lentes@helmholtz-muenchen.de] Sent: Wednesday, June 12, 2013 7:54 PM To: opensuse-de@opensuse.org Subject: Verständnisfrage zu einem init-skript
Hi,
ich schlage mich hier momentan mit einem init-skript rum und habe eine Verständnisfrage. Es geht um das skript /etc/init.d/boot.localfs. OS is SLES 11 SP2 64bit. Zum Verständnis habe ich eine Menge echos in das skript eingebaut.
Hier mal die entsprechenden Schnipsel:
############################### list_missed () { local dev line local mount_opts="-t $nofs,nonone -O no_netdev" echo -e "\nfunction list_missed, line 87, mount_opts= $mount_opts" echo -e "\nZeile 89: Jetzt wird gemounted: \n"
... } ##################################
################################## wait_for_udev () { local dev local -i timeout=1200
local missing=$(list_missed) echo -e "\nfunction wait_for_udev, Zeile 114, missing: $missing" test -n "$missing" || return 0 echo -e 'Waiting for $missing (Zeile 118)' echo -e "\n" echo -n "Waiting for $missing " while test $timeout -gt 0 ; do usleep 25000
... } ##################################
und
################################## case "$1" in start) ... wait_for_udev
... ##################################
Die entsprechende Ausgabe in /var/log/boot.msg sieht dann wie folgt aus:
################################## <notice -- Jun 12 18:04:05.263822000> boot.localfs start
function wait_for_udev, Zeile 114, missing: function list_missed, line 87, mount_opts= -t nonfs,nonfs4,nosmbfs,nocifs,noafs,noncpfs,nosysfs,noproc,nocgr oup,nocpuset,nodevtmpfs,nodebugfs,nosecurityfs,no devpts,nopstore,nonone -O no_netdev
Zeile 89: Jetzt wird gemounted:
Zeile 89: line: /dev/vg_1/lv_1 on /virtuelle_maschinen type ext3 (rw,acl,user_xattr) Zeile 92: dev: /dev/vg_1/lv_1
Zeile 92: line: /dev/vg_1/lv_1 on /virtuelle_maschinen type ext3 (rw,acl,user_xattr)
... ###################################
Ich versteh das folgendermaßen:
Da die Maschine bootet, wird das Skript mit "start" aufgerufen. Da wird relativ früh die Funktion wait_for_udev aufgerufen. Dort kommt die Zeile "local missing=$(list_missed)". Ich versteh das so, daß die Funktion list_missed aufgerufen wird und per Kommandosubstitution das was list_missed rausschmeisst in der lokalen Variablen missing abgespeichert wird. In list_missed wird in der 3. Zeile "echo -e "\nfunction list_missed, line 87, mount_opts= $mount_opts"" ein Text und der Inhalt der Variablen mount_ops ausgegeben. Anschließend wird eine weitere Zeile Text ausgegeben. Die Funktion list_missed wird komplett abgearbeitet, anschließend wird zurück zu wait_for_udev gesprungen und dann die Zeile "echo -e "\nfunction wait_for_udev, Zeile 114, missing: $missing"" ausgegeben.
Wenn ich mir jetzt aber /var/log/boot.msg ansehe, entspricht der Output nicht meinem erwartetem Ablauf. list_missed wird IMHO VOR der Zeile "echo -e "\nfunction wait_for_udev, Zeile 114, missing: $missing"" aufgerufen. Also müssten die echos aus list_missed auch VOR ""\nfunction wait_for_udev, Zeile 114, missing: $missing"" ausgegeben werden.
Werden sie aber nicht. Stattdessen sieht es aus, als ob nach "local missing=$(list_missed)" weiter wait_for_udev abgearbeitet wird und erst mit einer Verzögerung list_missed abgearbeitet wird.
Hi,
hab's selbst rausgekriegt. In der Zeile "local missing=$(list_missed)" wird die Funktion list_missed aufgerufen. Die echos in dieser Funktion werden aber nicht auf die Konsole bzw. in's log geschrieben, sondern landen in der Variablen missing. Und erst wenn ich mir $missing ansehe, kriege ich raus, was in list_missed geschrieben wurde.
Bernd
Helmholtz Zentrum München Deutsches Forschungszentrum für Gesundheit und Umwelt (GmbH) Ingolstädter Landstr. 1 85764 Neuherberg www.helmholtz-muenchen.de Aufsichtsratsvorsitzende: MinDir´in Bärbel Brumme-Bothe Geschäftsführer: Prof. Dr. Günther Wess Dr. Nikolaus Blum Dr. Alfons Enhsen Registergericht: Amtsgericht München HRB 6466 USt-IdNr: DE 129521671