Schrift
[thread]8512[/thread]

Problem bei der Ausführung von LINUX-Befehlen: Kommandozeilen-Befehle über perl ausf.



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Duff
 2006-11-17 11:55
#71817 #71817
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

vielleicht kann mir ja hier jemand weiterhelfen.

Ich habe mir ein kleines Skript geschrieben, um WLAN-Netze zu finden und diese dann mit meinen konfigurierten zu vergleichen, so dass ich am Ende eine Auswahl über alle gefundenen Netze bekomme, die auch in meiner Konfig stehen.

Eigentlich funktioniert das Skript auch, nur manchmal wird die Verbindung nicht aufgebaut, so dass ich das Skript ein paar mal hinter einander ausführen muss.

Hier ein Auszug aus dem Skript:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
          if ("$k" eq "$input"){
# Die SSID des Netzes in eine Datei schreiben
open (DAT,">","$datei") or die "Konnte die Datei \"$datei\" nicht öffnen!\n";
print DAT $input;
close(DAT);
print "Verbindung zu WLAN-Netz \"$input\" wird aufgebaut...\n";
print "...\n";
my @system=`sudo ifup eth2`;
print "...\n";
print "@system\n";
print "...\n";
}


Und der Aufruf des Skriptes, wobei das array @system leer bleibt.

./wlan_scripts.pl
Code: (dl )
1
2
3
4
 1.WLAN-Netz: WLAN01
Mit welchem der oberen WLAN-Netze soll eine Verbindung aufgebaut werden?
Bitte das gewünschte WLAN-Netz eingeben: WLAN01
Verbindung zu WLAN-Netz "WLAN01" wird aufgebaut...


Jemand nee Idee, wieso die Kommando-Befehle in Linux nur manchmal über perl ausgeführt werden?
D'OH
Daniel
nepos
 2006-11-17 13:00
#71818 #71818
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, ich denke, ausgefuehrt wird der Befehl immer. Aber manchmal klappt das mit dem Netzaufbau halt nicht. Hast schon mal in den Logs nachgesehen?
bloonix
 2006-11-17 13:40
#71819 #71819
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Wenn du "externe" Befehle ausführst, sollte du unbedingt Fehlermeldungen
abfangen!

Perldoc:Error-Indicators

Im gleichen Dokument etwas höher ...

* $CHILD_ERROR
* $?

beachten. Siehe auch Perldoc:system().\n\n

<!--EDIT|opi|1163764183-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Duff
 2006-11-17 14:07
#71820 #71820
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Quote
Hm, ich denke, ausgefuehrt wird der Befehl immer. Aber manchmal klappt das mit dem Netzaufbau halt nicht. Hast schon mal in den Logs nachgesehen?


Das habe ich auch gedacht, aber wenn der Aufbau nicht klappen sollte (warum auch immer) müsste doch trotzdem was ins array geschrieben werden.
D'OH
Daniel
Duff
 2006-11-18 12:54
#71821 #71821
User since
2006-10-06
283 Artikel
BenutzerIn

user image
So, ich habe mir in der perldoc mal den Abschnitt zu Error-Indicators angeschaut
Quote
# $CHILD_ERROR
# $?

The status returned by the last pipe close, backtick (`` ) command, successful call to wait() or waitpid(), or from the system() operator. This is just the 16-bit status word returned by the wait() system call (or else is made up to look like it). Thus, the exit value of the subprocess is really ($?>> 8 ), and $? & 127 gives which signal, if any, the process died from, and $? & 128 reports whether there was a core dump. (Mnemonic: similar to sh and ksh.)

Additionally, if the h_errno variable is supported in C, its value is returned via $? if any gethost*() function fails.

If you have installed a signal handler for SIGCHLD , the value of $? will usually be wrong outside that handler.

Inside an END subroutine $? contains the value that is going to be given to exit(). You can modify $? in an END subroutine to change the exit status of your program. For example:

END {
$? = 1 if $? == 255; # die would make it 255
}

Under VMS, the pragma use vmsish 'status' makes $? reflect the actual VMS exit status, instead of the default emulation of POSIX status; see "$?" in perlvms for details.

Also see "Error Indicators"


Aber Verstanden habe ich das ganze noch nicht so recht.
Ich möchte doch herausfinden, ob ein Fehler auftritt und um was für einen Fehler es sich handelt und diesen Fehler dann ausgeben.
Nur wie?
D'OH
Daniel
Duff
 2006-11-18 13:04
#71822 #71822
User since
2006-10-06
283 Artikel
BenutzerIn

user image
So, konnte nun endlich nochmal einen Systemfehler erzeugen (das Programm dazu mehrfach ausgeführt).

Als Systemfehler bekomme ich nun folgendes gemeldet:
Code: (dl )
1
2
3
4
5
6
# ./skript.pl
1.WLAN-Netz: WLAN01
Mit welchem der oberen WLAN-Netze soll eine Verbindung aufgebaut werden?
Bitte das gewünschte WLAN-Netz eingeben: WLAN01
Verbindung zu WLAN-Netz "WLAN01" wird aufgebaut...
system /usr/bin/sudo /sbin/ifup eth2 failed: 13 at /<Pfad>/skript.pl line 93, <STDIN> line 1.


Dazu habe ich das Skript vorher um folgende Zeilen ergänzt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
                        if ("$k" eq "$input"){
# Die SSID des Netzes in eine Datei schreiben
open (DAT,">","$datei") or die "Konnte die Datei \"$datei\" nicht öffnen!\n";
print DAT $input;
close(DAT);
print "Verbindung zu WLAN-Netz \"$input\" wird aufgebaut...\n";
#my @system=`/usr/bin/sudo /sbin/ifup eth2`;
#print join("--", @system)."\n";
my @args=("/usr/bin/sudo /sbin/ifup eth2");
system(@args) == 0
or die "system @args failed: $?";
}
D'OH
Daniel
Duff
 2006-11-20 09:30
#71823 #71823
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Niemand eine Idee, was die Fehlermeldung genau bedeutet?

Ist dies denn nun eine Fehlermeldung, die sich auf perl bezieht oder auf den Linux-Befehl?
D'OH
Daniel
renee
 2006-11-20 10:04
#71824 #71824
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das sagt aus, dass der Befehl /usr/bin/sudo /sbin/ifup eth2 nicht funktioniert hat... Funktioniert das denn normalerweise in der Konsole? Muss man da zusätzlich noch etwas eingeben?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RalphFFM
 2006-11-20 10:15
#71825 #71825
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Die Benutzung von sudo bedeutet doch normalerweise Interaktion mit dem Benutzer. (Sofern das Ticket von m.W. 15Min. abglaufen ist.)
Vielleicht hängt es an dieser Stelle.
nepos
 2006-11-20 10:16
#71826 #71826
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn sudo korrekt konfiguriert ist, brauchts da keine Benutzerinteraktion mehr.
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-11-17 11:55.