- Mitglied seit
- 15. Mai 2008
- Beiträge
- 21.900
- Punkte für Reaktionen
- 14
- Punkte
- 0
In diesem Workshop basteln wir uns ein cgi-Skript.
Was ist ein cgi-Skript? cgi = commom gateway interface ... bezeichnet ein Programm, welches von einem Web-Server ausgeführt werden kann/darf. Also wir wollen, dass unser system-Apache ein Shell-Skript ausführt und die Ausgabe zu einem Webbrowser hinschiebt und anzeigt.
Damit der System-Apache das cgi-Skript ausführen kann, schreibt man es am besten ein ein eigenes Verzeichnis unter '/usr/syno/synoman/webman/3rdparty/' - nennen wir das Verzeichnis 'ws' für 'workshop':
Damit das cgi-Skript auch vom Webserver dem richtigen Kommandointerpreter vorlegt wird, schreiben wir in die erste Zeile die Shebang-Anweisung. Damit die Webseite auch regelgerecht aufgebaut ist, brauchen wir noch einen Header und eine Leerzeile. Hierfür verwenden wir den 'echo -e', denn dieser kann auch Zeilenvorschübe per Metazeichen (\n):
Ich habs jetzt nicht hingeschrieben, aber beenden tun wir die Eingabe des 'cat' mit einem <Strg-D>. Jetzt müssen wir die Datei noch mit einem chmod +x 'executeable' machen:
Und nun können wir diese Datei im Browser aufrufen:
Natürlich muss an die Stelle, wo beim mir 'syno' steht, entweder der richtige Name der DS stehen oder die IP-Adresse. Und klar der Port 5000 muss freigeschaltet sein ...
Wenn alles ok ist, dann müsste im Browser der Text 'huhu' stehen und im Browser-Fenster-Rand der Text 'Workshop' vorkommen (title).
Wie können wir nun etwas anderes ausgeben, als einen Text? Also z.B. eine Prozessliste?
Na das sieht jetzt nicht gerade übersichtlich aus. Also das muss noch Format rein: <pre> gibt auch Leerstellen und Zeilenvorschübe richtig hübsch aus.
Wenn uns nur spezielle Zeilen des ps interessieren, dann kann man diese per 'grep' heraus filtern:
Unschön ist, dass auch die Zeile mit dem 'grep' erscheint. Aber das kann man mit einem inversen 'egrep -v grep' richten.
Jetzt fehlt noch die Spaltenbeschriftung. 'head -1' hilft.
Nun wollen wir sicherlich nicht immer die 'httpd'-Prozessinformationen, sondern halt die, die wir gerade haben wollen. In der URL kann man den Query-String benutzen, um beim Aufruf Parameter mitzugeben.
In unserem cgi-Skript können wir darauf per Shell-Variablen 'QUERY_STRING' zugreifen.
Statt 'httpd' geht jetzt auch 'inetd' oder 'init' oder oder ... Nur wenn was Nicht-Vorhandenes eingeben wird, dann wird nur die Überschrift ausgegeben.
=======
Viel Spaß beim cgi-Skripten. Wer möchte, kann ja mal den ipkg-ps einbauen. Und vielleicht könnte auch jemand eine Idee haben, wie man die doppelte Spaltenüberschrift wegbekommt, wenn man keinen Query-Search-String eingibt.
Itari
=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.
Shell-Workshop (11)
Was ist ein cgi-Skript? cgi = commom gateway interface ... bezeichnet ein Programm, welches von einem Web-Server ausgeführt werden kann/darf. Also wir wollen, dass unser system-Apache ein Shell-Skript ausführt und die Ausgabe zu einem Webbrowser hinschiebt und anzeigt.
Damit der System-Apache das cgi-Skript ausführen kann, schreibt man es am besten ein ein eigenes Verzeichnis unter '/usr/syno/synoman/webman/3rdparty/' - nennen wir das Verzeichnis 'ws' für 'workshop':
Rich (BBCode):
Syno> mkdir /usr/syno/synoman/webman/3rdparty/ws
Syno> cd /usr/syno/synoman/webman/3rdparty/ws
Syno> pwd
/usr/syno/synoman/webman/3rdparty/ws
Damit das cgi-Skript auch vom Webserver dem richtigen Kommandointerpreter vorlegt wird, schreiben wir in die erste Zeile die Shebang-Anweisung. Damit die Webseite auch regelgerecht aufgebaut ist, brauchen wir noch einen Header und eine Leerzeile. Hierfür verwenden wir den 'echo -e', denn dieser kann auch Zeilenvorschübe per Metazeichen (\n):
Rich (BBCode):
Syno> cat >test1.cgi
#!/bin/sh
echo -e 'Content-type: text/html\n\n<html><head><title>Workshop</title></head><body>huhu</body></html>'
Syno>
Ich habs jetzt nicht hingeschrieben, aber beenden tun wir die Eingabe des 'cat' mit einem <Strg-D>. Jetzt müssen wir die Datei noch mit einem chmod +x 'executeable' machen:
Rich (BBCode):
Syno> chmod +x test1.cgi
Und nun können wir diese Datei im Browser aufrufen:
Rich (BBCode):
http://syno:5000/webman/3rdparty/ws/test1.cgi
Natürlich muss an die Stelle, wo beim mir 'syno' steht, entweder der richtige Name der DS stehen oder die IP-Adresse. Und klar der Port 5000 muss freigeschaltet sein ...
Wenn alles ok ist, dann müsste im Browser der Text 'huhu' stehen und im Browser-Fenster-Rand der Text 'Workshop' vorkommen (title).
Wie können wir nun etwas anderes ausgeben, als einen Text? Also z.B. eine Prozessliste?
Rich (BBCode):
Syno> cat >test1.cgi
#!/bin/sh
echo -e 'Content-type: text/html\n\n<html><head><title>Workshop</title></head><body>'
ps
echo -e '</body></html>'
Syno>
Na das sieht jetzt nicht gerade übersichtlich aus. Also das muss noch Format rein: <pre> gibt auch Leerstellen und Zeilenvorschübe richtig hübsch aus.
Rich (BBCode):
Syno> cat >test1.cgi
#!/bin/sh
echo -e 'Content-type: text/html\n\n<html><head><title>Workshop</title></head><body><pre>'
ps
echo -e '</pre></body></html>'
Syno>
Wenn uns nur spezielle Zeilen des ps interessieren, dann kann man diese per 'grep' heraus filtern:
Rich (BBCode):
Syno> cat >test1.cgi
#!/bin/sh
echo -e 'Content-type: text/html\n\n<html><head><title>Workshop</title></head><body><pre>'
ps | grep "httpd"
echo -e '</pre></body></html>'
Syno>
Unschön ist, dass auch die Zeile mit dem 'grep' erscheint. Aber das kann man mit einem inversen 'egrep -v grep' richten.
Jetzt fehlt noch die Spaltenbeschriftung. 'head -1' hilft.
Rich (BBCode):
Syno> cat >test1.cgi
#!/bin/sh
echo -e 'Content-type: text/html\n\n<html><head><title>Workshop</title></head><body><pre>'
ps | head -1
ps | grep "httpd"
echo -e '</pre></body></html>'
Syno>
Nun wollen wir sicherlich nicht immer die 'httpd'-Prozessinformationen, sondern halt die, die wir gerade haben wollen. In der URL kann man den Query-String benutzen, um beim Aufruf Parameter mitzugeben.
Rich (BBCode):
http://syno:5000/webman/3rdparty/ws/test1.cgi?httpd
In unserem cgi-Skript können wir darauf per Shell-Variablen 'QUERY_STRING' zugreifen.
Rich (BBCode):
Syno> cat >test1.cgi
#!/bin/sh
echo -e 'Content-type: text/html\n\n<html><head><title>Workshop</title></head><body><pre>'
ps | head -1
ps | grep "$QUERY_STRING"
echo -e '</pre></body></html>'
Syno>
Statt 'httpd' geht jetzt auch 'inetd' oder 'init' oder oder ... Nur wenn was Nicht-Vorhandenes eingeben wird, dann wird nur die Überschrift ausgegeben.
=======
Viel Spaß beim cgi-Skripten. Wer möchte, kann ja mal den ipkg-ps einbauen. Und vielleicht könnte auch jemand eine Idee haben, wie man die doppelte Spaltenüberschrift wegbekommt, wenn man keinen Query-Search-String eingibt.
Itari
=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.
Shell-Workshop (11)