• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Linux Befehle mit CGI ausführen - was: Linux Befehle mit JavaScript ausführen

snowy

New member
Hallo,

Ich habe ein Steuergerät auf dem uCLinux läuft. Das Teil hat auch einen Webbrowser. Über dessen IP möchte ich gern im Broswer eine DHTML Seite mit Statusinformationen des Steuergerätes darstellen. Zum Beispiel wenn der User einen Button drückt soll im Hintergrund ein Linux Befehl auf dem Gerät ausgeführt werden und die Ausgabe auf der DHTML Seite angezeigt werden.
Es gibt auf dem Gerät den Befehl "cat rtc", dann bekommt man als Ausgabe die Uhrzeit.

1.)Wie führe ich die Befehle aus?
2.)Wie bekomme ich die Ausgabe auf meine Seite?

Vielen Dank!!
 
AW: Linux Befehle mit JavaScript ausführen

Ich habe ein Steuergerät auf dem uCLinux läuft. Das Teil hat auch einen Webbrowser. Über dessen IP möchte ich gern im Broswer eine DHTML Seite mit Statusinformationen des Steuergerätes darstellen.
hat das teil einen Webbrowser oder einen Webserver? ersteres denke ich nicht. auf dem Webserver läuft jetzt auch bestimmt kein Javascript, das läuft auf dem client im browser. den befehl mußt du also mit einer serverseitigen sprache ausführen.
 
AW: Linux Befehle mit JavaScript ausführen

Das Steuergerät hat einen Webserver (BOA). Über ein Netzwerkkabel ist es mit meinem PC verbunden. Da hab ich normal einen Browser. Auf dem Steuergerät gibt es ein festgelegtes Verzeichnis wo dann die index.html rein muss. Diese kann ich vom PC mit dem Browser über die IP in der URL Leiste aufrufen.

Bin noch Anfänger, meinst du mit Serverseitig. Das ich das Skript in die Index.html einbette auf dem Steuergerät?

VG

[EDIT1]: Das Manual gibt nicht viel her vom Steuergerät. Da steht nur über CGI hat man durchgriff auf die Prozessdaten...
 
Zuletzt bearbeitet:
AW: Linux Befehle mit JavaScript ausführen

Hab mich über CGI bissl belesen. Ich muss also ein CGI Skript in das CGI Verzeichnis auf dem Steuergerät ablegen. Diese muss dann die Aufrufe für die Linuxbefehle enthalten oder? Wie rufe ich die Linuxbefehle aber auf? Das Ergebnis der Linuxbefehle muss ich die dann auch mit CGI skript wieder einlesen und dann eine HTML Antwortseite an das rufende HTML skript im Web Verzeichnis des Steuergerätes zurücksenden zum Anzeigen?

Danke für Deine Hilfe!
 
AW: Linux Befehle mit JavaScript ausführen

ich weiß ja nicht mal was dir für eine scriptsprache zur verfügung steht. auch hab ich null ahnung von serverseitiger programmierung und du bist außerdem im falschen forum.
stell deine frage lieber im serverseitigen forum.
 
Verschoben.

CGI Skripte unter Linux können vom Shellskript, über Perlskripte oder bis zu einer tatsächlichen ".exe" alles sein, was man ausführen kann.
 
Zuletzt bearbeitet:
Für meine Anwendung wäre doch ein Shell-Skript am einfachsten oder?
Mir ist halt immer noch nicht richtig klar wie ich meine Aufgabenstellung jetzt lösen soll...

Wie kann ich mir die Ergebnisse der Linuxbefehle auf dem Steuergerät im Browser auf dem PC sichtbar machen?
 
Dabei kam dann im Browser nach Absenden über den Button die Fehlermeldung des Webservers BOA:

501 Not Implemented
POST to non-script is not supported in Boa.
CGI Skripte müssen in einem dafür vorgesehenen Ordner untergebracht werden.
Außerdem stellt sich die Frage, ob überhaupt eine Perl-Installation auf dem Device untergebracht ist.
 
das cgi skript liegt im richtigen cgi ordner. dann wird wohl das gerät perl nicht unterstützen.
wie gesagt das Manual ist nicht aussagekräftig.
Dann wird wohl ein Shellskript als CGI das beste sein?
Das müsste ich dann vom Prinzip analog zum Perlskript programmieren?Das dann die Ausgabe der Linuxbefehle in eine Antwort HTML Seite geschrieben wird?
 
Ich kann meine Antwort nur wiederholen, es ist egal welche Sprache du benutzt du musst einen HTTP Header verschicken, eine HTML Seite reicht nicht und ist auch nicht nötig.
 
Ich kann meine Antwort nur wiederholen, es ist egal welche Sprache du benutzt du musst einen HTTP Header verschicken, eine HTML Seite reicht nicht und ist auch nicht nötig.

mir ist nicht ganz klar was du eigentlich sagen willst?! den HTTP header verschickt doch der server und warum soll die HTML seite unnötig sein? die will er/sie doch anzeigen.
 
501 Not Implemented
POST to non-script is not supported in Boa.
das problem dürfte hier liegen
Code:
...
    [COLOR="red"]if(strcmp(CGI_MIME_TYPE, get_mime_type(buffer)) == 0) [/COLOR]{   /* cgi */
        if(!(S_IXOTH & statbuf.st_mode)) {
	    send_r_forbidden(req);
	    return 0;
	}

        if(is_nph)
            req->is_cgi = NPH;
        else
            req->is_cgi = CGI;

        req->script_name = strdup(req->request_uri);
        return 1;
    }
    else if(req->method == M_POST) {		/* POST to non-script */
	send_r_not_implemented(req);
	return 0;
    }
und vermutlich hier siehe boa.conf zu lösen
Code:
# MimeTypes: This is the file that is used to generate mime type pairs
# and Content-Type fields for boa.

MimeTypes /mime.types

# DefaultType: MIME type used if the file extension is unknown, or there
# is no file extension.

DefaultType text/plain
dann ist allerdings immer noch die frage, ob perl auf der kiste überhaupt drauf ist.

EDIT: ach so, CGI_MIME_TYPE ist "application/x-httpd-cgi"
 
Zuletzt bearbeitet:
@ein-schlauer: das habe ich auch nicht verstanden.Wie meintest Du das?

@hesst:

Danke.Deine Hilfe scheint jetzt in die richtige Richtung zu gehen.

in boa.conf steht:
# MimeTypes: This is the file that is used to generate mime type pairs
# and Content-Type fields for boa.

MimeTypes /etc/mime.types

# DefaultType: MIME type used if the file extension is unknown, or there
# is no file extension.

DefaultType text/html

mime.types enthält:
/etc/boa # ls
boa.conf mime.types original
/etc/boa # cat mime.types
#
# sample mime.types
#
application/postscript ps eps
application/pgp pgp
audio/x-aiff aif aifc aiff
text/plain asc txt
audio/ulaw au
video/x-msvideo avi
application/x-bcpio bcpio
application/octet-stream bin
application/x-netcdf cdf
application/x-cpio cpio
application/x-csh csh
application/x-dvi dvi
text/x-setext etx
application/andrew-inset ez
image/gif gif
application/x-gtar gtar
application/x-gunzip gz
application/x-hdf hdf
text/html html
image/ief ief
image/jpeg jpe jpeg jpg
application/x-latex latex
application/x-troff-man man
application/x-troff-me me
application/x-mif mif
video/quicktime mov qt
video/x-sgi-movie movie
video/mpeg mp2 mpe mpeg mpg
application/x-troff-ms ms
application/x-netcdf nc
application/oda oda
image/x-portable-bitmap pbm
application/pdf pdf
image/x-portable-graymap pgm
application/x-chess-pgn pgn
image/x-portable-anymap pnm
image/x-portable-pixmap ppm
application/postscript ps
image/x-cmu-raster ras
image/x-rgb rgb
application/x-troff roff
application/rtf rtf
text/richtext rtx
application/x-sh sh
application/x-shar shar
audio/basic snd
application/x-wais-source src
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-troff t tr
application/x-tar tar
application/x-tcl tcl
application/x-tex tex
application/x-texinfo texi texinfo
image/tiff tif tiff
text/tab-separated-values tsv
application/x-ustar ustar
audio/x-wav wav
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
application/zip zip

Weil Perl nicht in der Liste auftaucht bedeutet das jetzt also das er Perl nicht interpretieren kann?

Kann man das erweitern?

Was kannst Du mir jetzt empfehlen?

Danke für Deine Hilfe!
 
@ein-schlauer: das habe ich auch nicht verstanden.Wie meintest Du das?
Du solltest Dich mal in die Funktionsweise von CGI einlesen.

Weil Perl nicht in der Liste auftaucht bedeutet das jetzt also das er Perl nicht interpretieren kann?
Die Liste mit den MIME Typen hat rein gar nichts damit zu tun, was das System ausführen kann, sondern nur welche Dateiendungen wie ausgeliefert werden. Das gilt aber eben nicht für CGI-Skripte, sondern nur für statische Dateien.

Kann man das erweitern?
Wenn Du genug Platz hast, für eine Perl Installation, dann kann man das erweitern.
Ansonsten kannst Du auch ein einfaches Shell Skript basteln und glücklich werden.
 
Ich werds erstmal mit einem Shellskript lokal auf meinem PC probieren.

Dazu habe ich eine Datei namens index.html angelegt:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body bgcolor="#E0E0E0">
<h1>Test</h1>
<form action="http://home/test/CGI_Test/Info.sh" method="post">

<p><input type="submit" value="Daten holen"></p>
</form>
</body>
</html>

dazu noch ein Shellskript info.sh in dem Verzeichnis welches bei index.html angegeben ist:
Code:
#Datumsausgabe

echo << "Content-type: text/html"
echo << '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">'"
echo << "<html><head><title>CGI-Feedback</title></head>"
echo << "<body><h1>CGI-Feedback vom Programm <i>info.sh</i></h1>"
echo << "<p><b>Datum:</b> $date</p>"
echo << "</body></html>"

Ich möchte einfach als Antwort das Datum zurück bekommen.
So ist das noch falsch.

Was muss ich noch ändern?
 
Zurück
Oben