추가적인 nginx lua 플러그인이 필요없는 또 다른 해결책이 있습니다. 이것은 socat
을 사용하고 있습니다. 당신은 모든 연결에 bash는 스크립트를
socat TCP4-LISTEN:8080,reuseaddr,fork EXEC:./test.sh
test.sh
#!/bin/bash
recv() { echo "< [email protected]" >&2; }
read r line
line=${line%%$'\r'}
recv "$line"
read -r REQUEST_METHOD REQUEST_URI REQUEST_HTTP_VERSION <<<"$line"
declare -a REQUEST_HEADERS
while read -r line; do
line=${line%%$'\r'}
recv "$line"
# If we've reached the end of the headers, break.
[ -z "$line" ] && break
REQUEST_HEADERS+=("$line")
done
eval $(echo $REQUEST_METHOD | awk -F? '{print $2}' | awk -F'&' '{for (i=1;i<=NF;i++) print $i}')
cat <<END1
HTTP/1.1 200 OK
Content-Type: plain/text
REQUEST_METHOD=$REQUEST_METHOD
REQUEST_URI=$REQUEST_URI
REQUEST_HTTP_VERSION=$REQUEST_HTTP_VERSION
REQUEST_HEADERS=$REQUEST_HEADERS
script=$script
param1=$param1
param2=$param2
END1
그리고 컬에 대한 테스트를 실행 포트 8080
에 socat을 시작 그래서 당신은
$ curl "localhost:8080/exec?script=test2.sh¶m1=abc¶m2=def"
REQUEST_METHOD=/exec?script=test2.sh¶m1=abc¶m2=def
REQUEST_URI=HTTP/1.1
REQUEST_HTTP_VERSION=
REQUEST_HEADERS=Host: localhost:8080
script=test2.sh
param1=abc
param2=def
다음과 같다 nginx에서 proxy_pass
으로 쉽게 사용할 수 있습니다.
당신이 떠들썩한 파티에서 전체 서버 socat를 사용하여 참조해야하는 경우
이
https://github.com/avleen/bashttpd/blob/master/bashttpd
사용에서 봐 가지고 https://github.com/jprjr/lua-resty-exec 또는 https://github.com/juce/ 루아 - 레시 쉘. Sockproc을 루트로 시작하십시오. –
고맙습니다. ' 데몬을 실행하지 않아도되는 방법이 있는지 궁금합니다. lua os.execute는 쉘 명령을 실행할 수는 있지만 출력이나 상태 코드를 반환 할 수없는 것 같습니다. 나는 bash wrapper 스크립트를 만들 생각을했다.이 스크립트는 스크립트 이름을 취하고 args (자신의 args처럼)를 실행하고 실행한다. 그런 다음 Lua가 읽을 수 있도록 출력을 종료하고 텍스트 파일로 종료 코드를 덤프합니다. Prob는 랩퍼 스크립트에 고유 ID를 전달하여 두 파일 호출이 동일한 파일에 기록되지 않도록 파일 이름으로 사용되어야합니다. 누구나 깨끗한 해결책을 생각할 수 있을지 궁금합니다. – bobbybay
https://stackoverflow.com/questions/132397/get-back-the-output-of-os-execute-in-lua –