Event loop из семи залуп.
Сегодня запускаем Bash-скрипт из Nginx по location.
Идея такая: при открытии URL в браузере https://bashdays.com/bashdays.sh запускается Bash-скрипт, который лежит на сервере в папке /tmp/bashdays.sh.
А зачем это нужно? Элементарно — чтобы запустить Bash-скрипт!
Чтобы подобное реализовать, тебе понадобится fcgiwrap либо lua. Из обычного Nginx, который в коробке, это сделать невозможно. Политика безопасности, вся хуйня.
Я возьму fcgiwrap, не хочу компилить модуль lua. Если у тебя есть lua, можешь через него подобное реализовать. Примеры ниже.
Ставим врапер:
apt install fcgiwrap
Закидываем скрипт в /tmp/bashdays.sh:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<h1>Hello Bashdays</h1>"
echo "<p>This is a test bash script.</p>"
echo "hello bashdays" > file.txt
В конфиге Nginx городим location:
location /bashdays.sh {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /tmp/bashdays.sh;
include fastcgi_params;
}
Заранее убедись, что сокет fcgiwrap создался и лежит в нужном месте. На этом, собственно, всё. Да, надо сделать ещё nginx reload.
Открываем https://bashdays.com/bashdays.sh и лицезрим «Hello Bashdays This is a test bash script.».
Но это ещё не всё. В папке /tmp появился файл file.txt. Как видишь, всё получилось. Дальше включай фантазию и твори.
Для lua это будет выглядеть как-то так:
location /bashdays.sh {
content_by_lua_block {
os.execute("/tmp/bashdays.sh")
}
}
Я этот код не проверял, он всяко не работает, на коленке накидал, но, думаю, главное тут — суть.
Кстати, через PHP, наверное, тоже можно башник дёрнуть: там сокет так же подкинуть и через «хуй-пизда-лопата» запустить скрипт.
Вообще промышлять таким — фу! Если ты кому-то расскажешь, то тебя выгонят ссаными тряпками. Всё чисто ради экспериментов. Изучай!








Комментарии