2014-04-06 12 views
34

Ich möchte jedes Mal ein Shell-Skript ausführen, wenn mein Nginx-Server eine HTTP-Anfrage erhält. Irgendwelche einfachen Möglichkeiten, dies zu tun?nginx - Wie wird ein Shell-Skript bei jeder Anfrage ausgeführt?

+0

Was ist das eigentliche Problem, das Sie versuchen, damit zu lösen? Wie Sie es erklärt haben, könnte dies leicht zu weiteren Problemen führen. –

+0

Ich bin auf einem RPi und ich möchte eine der LEDs blinken, wenn mein Server eine Anfrage erhält. –

+0

Welche Backend-Sprache/Framework verwenden Sie? Die meisten Backend-Sprachen sollten es Ihnen ermöglichen, ein Shell-Skript aufzurufen. –

Antwort

40

Sie können ein Shell-Skript über den Code Lua aus der Datei nginx.conf ausführen, um dies zu erreichen. Sie müssen die HttpLuaModule haben, um dies zu tun.

Hier ist ein Beispiel dafür.

location /my-website { 
    content_by_lua_block { 
    os.execute("/bin/myShellScript.sh") 
    } 
} 
+1

Dies scheint einen Nginx-Fehler zu erzeugen ... '[alert] 6807 # 0: waitpid() fehlgeschlagen (10: Keine Kindprozesse)' - siehe http://serverfault.com/q/432609/86531 – Nick

+1

Es scheint, dass der Standardfehler von 'os.execute()' in das nginx Fehlerprotokoll geht und jede Standardausgabe verworfen wird. Die Funktion 'os.execute()' gibt den Unterprozess-Exitcode zurück, sodass dieses Beispiel eine ganze Zahl ausgeben würde. Etwas, das auf 'io.popen()' basiert, könnte besser funktionieren, um die Standardausgabe des Unterprozesses zu durchlaufen. –

+0

Es gibt auch https://github.com/juce/lua-resty-shell, aber das erfordert einen externen Daemon. –

28

fand ich die folgenden Informationen im Internet unter dieser Adresse: https://www.ruby-forum.com/topic/2960191

Dies erwartet, dass Sie fcgiwrap auf dem Computer installiert haben. Es ist wirklich so einfach wie:

sudo apt-get install fcgiwrap 

Beispielscript (ausführbar sein muss)

#!/bin/sh 
# -*- coding: utf-8 -*- 
NAME=`"cpuinfo"` 
echo "Content-type:text/html\r\n" 
echo "<html><head>" 
echo "<title>$NAME</title>" 
echo '<meta name="description" content="'$NAME'">' 
echo '<meta name="keywords" content="'$NAME'">' 
echo '<meta http-equiv="Content-type" 
content="text/html;charset=UTF-8">' 
echo '<meta name="ROBOTS" content="noindex">' 
echo "</head><body><pre>" 
date 
echo "\nuname -a" 
uname -a 
echo "\ncpuinfo" 
cat /proc/cpuinfo 
echo "</pre></body></html>" 

auch dies als eine Include-Datei verwenden, beschränkt nicht nur Shell Skripte.

Ich fand es sehr hilfreich für das, woran ich arbeite, ich hoffe es hilft Ihnen mit Ihrem RaspberryPI Projekt.

+1

Siehe auch https://www.nginx.com/resources/wiki/start/topics/examples/fcgiwrap/ und https://www.nginx.com/resources/wiki/start/topics/examples/fastcgiexample/ –

Verwandte Themen