halt
Спасибо. Сейчас попробую
halt
Так, видимо вот это он не понимает local api = freeswitch.API() local execstr = "luarun bridge_mur.lua " т.к. это дергается из фрисвитча. Тогда, видимо, нужно через эвент передавать
Snusmumriken
Ну передай ему freeswitch каким-нибудь образом.
halt
Сделал так function run(path) — Проверка, что путь - это строка assert(type(path) == 'string', 'Arg #1 error: string path expected') local file, err = io.open(path) — Ругаемся, если с файлом какие-то ошибки if not file then. return error('Open file error: ' .. path .. ':' .. tostring(err)). end .. — хз что это, но наверное не надо каждую строку дёргать local execstr = '/usr/bin/fs_cli -x "luarun bridge_mur.lua"' for line in file:lines() do local reply = executeString(execstr .. line) end file:close() end local isRun = true function OnStop() IsRun = false end while isRun do run('/usr/local/freeswitch/scripts/Test.txt') sleep(100) end но все равно ругается
halt
lua: obzvon.lua:16: attempt to call global 'executeString' (a nil value) stack traceback: obzvon.lua:16: in function 'run' obzvon.lua:28: in main chunk [C]: in ?
halt
Вот блин)
halt
А если использовать стандартные примеры?)
halt
По факту нужно построчно считать номер из файла и передать его выполнение другому скрипту
halt
можно и в одном (в этом) и предать считанный номер в '/usr/bin/fs_cli -x "luarun bridge_mur.lua"'
halt
наверное это будет выглядеть так os.execute(string.format("/usr/bin/fs_cli -x "luarun bridge_mur.lua",line));
mva
@halt7
mva
но нету текста ошибки, который тебе выводится
bebebe
Увлекательная суббота получилась в этом чате
halt
freeswitch убрал потому как он не вызовется напрямую из скрипта.
mva
а разве твоим изначальным кейсом не было вызывать этот скрипт внутри FS?
halt
сделал так ""function run(path) — Проверка, что путь - это строка assert(type(path) == 'string', 'Arg #1 error: string path expected') local file, err = io.open(path) — Ругаемся, если с файлом какие-то ошибки if not file then. return error('Open file error: ' .. path .. ':' .. tostring(err)). end .. — хз что это, но наверное не надо каждую строку дёргать — local execstr = '/usr/bin/fs_cli -x "luarun bridge_mur.lua"' for line in file:lines() do os.execute(string.format("/usr/bin/fs_cli -x 'luarun bridge_mur.lua'",line)); end file:close() end local isRun = true function OnStop() IsRun = false end while isRun do run('/usr/local/freeswitch/scripts/Test.txt') sleep(100) end ""
halt
root@homevoip:/usr/local/freeswitch/scripts# lua obzvon.lua +OK +OK lua: obzvon.lua:29: attempt to call global 'sleep' (a nil value) stack traceback: obzvon.lua:29: in main chunk [C]: in ?
halt
Почти уже работает) но не передается переменная os.execute(string.format('/usr/bin/fs_cli -x "luarun bridge_mur.lua"',line));
halt
line
halt
вызывает скрипт из freeswitch
halt
У меня в другом скрипте так работает отправка на почту
halt
вот пример if (disPosition ~= 'SUCCESS') then if (sna == '1') then if (eml ~= '') then os.execute(string.format("/usr/bin/mutt -n -f /dev/null -s \"[%s] got no answer, from [%s]\" %s < /dev/null",callee,dest,eml)); end end end
mva
@halt7 давай решать проблему без недосказываний и самодеятельности (о которой ты не сообщаешь)
mva
давай начнём сначала:
mva
как этот скрипт должен запускаться в итоге?
mva
из fs? из крона? руками?
halt
Пока вручную
halt
Парни, мне с мелким нужно отойти... спасибо, что помогаете
halt
сейчас вставил так os.execute(string.format('/usr/local/freeswitch/bin/fs_cli -x "luarun bridge_mur.lua"', [%s]));
halt
но видимо не правильно
mva
Пока вручную
нет, "пока" не катит
mva
конечная цель какая?
mva
запускать его извне FS или изнутри?
mva
это два диаметрально противоположных пути его написания
halt
Вручную, потом из веб морды хочу управление сделать
mva
хм
mva
просто меня ООООЧЕНЬ напрягает этот п**ец в виде os.execute(fs_cli luarun)
mva
и если это ещё и запускается внутри контекста fs (где доступно его api) - это ещё больший ахтунг
mva
как ахтунгом было бы, если ты из сторонней веб-морды на чём-то не являющимся lua, запускаешь lua-скрипт, который запускаешь fs_cli, который, в свою очередь, опять запускает lua-скрипт
vitaly
Www
Snusmumriken
Ну типа с тем же успехом можно было бы протянуть ключи от двери и сказать код от сейфа с деньгами. Если серьёзно, то при желании, изнутри веб-морды, с наличием os.execute, я могу, например, поставить luarocks -> luasocket, динамически скомпилить/подрубить всё это и скачать миллиард вирусов, попутно превратив машину в ботнет и майнер.
Snusmumriken
А если очень захочется - то ещё и обыскать все машины в локалке и сделать с ними то же самое. Ах да, все данные с этих машин уже у меня на харде. И все устройства хранения данных, которые контактировали с этой локалкой будут заражать всё окружение тем же самым. Ну, особенно под вендой.
Snusmumriken
Snusmumriken
Нет ты
halt
Отходил... можно и апи вставить и через сокет дергать FS. Я пока этим не заморачивался. Хотел вообше в принципе попробовать
bebebe
В случае когда мне требуется из openresty запустить бинарник, использую https://github.com/jprjr/lua-resty-exec
vitaly
добрый вечер страна - как выпилить определенные символы из строки - однима string.gsub()
vitaly
спасибо url = "///index.php????page====about&&&lol===you" function fix_url(s,C) for c in C:gmatch(".") do s=s:gsub(c.."+",c) end return s end print(fix_url(url,"+/=&?"))
Snusmumriken
Мммм. Определённые символы - str:gsub('[abc\\/]', '') Что конкретно хочешь? а) убрать дублирующиеся символы? б) убрать дублирующиеся символы в конкретных местах? в) проверить урл на корректность и пофиксить всё что там неправильное? г) предлагай варианты
vitaly
урл ломающие /?+#
vitaly
у меня пути к картинкам вида /id/title/1.jpg
vitaly
иногда а тайтлах некоректные символы - тогда скрипт ломается
Snusmumriken
Ммм. Например: local removelist = {'?+', '/+', '%++', '#+'} function remove(str) for i, v in ipairs(removelist) do str = str:gsub(v, v) end return str end
Snusmumriken
Тебя ведь интересуют "тупые неломающиеся но медленные способы", да?
Snusmumriken
Хотя не совсем так, чуть позже пофиксю.
vitaly
str = str:gsub(v, v) тут не нужно сделать str = str:gsub(v, "")
vitaly
?
vitaly
на скорось пофиг - это модуль луа к нгинкс на сервере - там ресурсов на милион лет
Snusmumriken
Ну да, типа
Snusmumriken
url = "///index.php????page====about&&&lol===you" function clear(url) local reps while reps ~= 0 do url, reps = url:gsub('([/=?&#])%1', '%1') end return url end print(clear(url)) --> /index.php?page=about&lol=you
Snusmumriken
И да, в 99.9% случаев это не нужно. Смотри что криво запрашивает и фикси. Ошибку 400 Bad Request ещё никто не отменял ))
Snusmumriken
Переделать регулярку на что-то типа '[/=?&#])%1+' - не получится, к сожалению, я проверил )) Плюс у неё нефиксированное время работы, чем больше дубликатов тем медленнее работает. Если косяков мало - быстрее чем циклом по символам. Если много - медленнее. Ну сам смотри.
vitaly
Да уже запилил. Работает функция. Проблема была в том что я делал это в шаблонизаторе. Сделал в основном модуле.
halt
Парни, продолжаю ковырять скрипт. Создал примитивный скрипт `local file = io.open("Test.txt", "r"); for line in file:lines() do print(line); end ` Если его запустить из консоли, то данные из файла выводит root@homevoip:/usr/local/freeswitch/scripts# lua line.lua 1001 1000 1005 Если же я его запускаю из под freeswitch , то freeswitch@homevoip.ru> luarun line.lua +OK 2018-06-25 12:11:01.151936 [ERR] mod_lua.cpp:203 /usr/local/freeswitch/scripts/line.lua:3: attempt to index local 'file' (a nil value) stack traceback: /usr/local/freeswitch/scripts/line.lua:3: in main chunk Что бы это значило?
Yuriy
файл не находит
mva
т.е. в случае интерпретатора - это та директория в которой у тебя открыт шелл
mva
в случае FS - это (явно другая, точный путь можешь узнать сделав ls -l /proc/<pid_фрисвитча>/cwd
mva
так что советую указывать полный путь
mva
а ещё положить тестовый файл в /tmp
mva
чтобы избежать проблем с правами
halt
ок. сейчас попробую
halt
Вставил полный путь - заработало. Теперь нужно сделать чтобы звонок по одному уходил (не запускался новый пока разговаривают по текущему вызову)
Viacheslav
Добрый вечер. Есть ли смысл использовать LuaJIT, если целевая платформа JIT не поддерживает? У кого-нибудь есть личный опыт сравнения их интерпретатора с ванильным 5.2?
Snusmumriken
Что конкретно хотел?