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
mva
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
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
запускать его извне FS или изнутри?
mva
это два диаметрально противоположных пути его написания
halt
Вручную, потом из веб морды хочу управление сделать
mva
хм
mva
mva
просто меня ООООЧЕНЬ напрягает этот п**ец в виде os.execute(fs_cli luarun)
mva
и если это ещё и запускается внутри контекста fs (где доступно его api) - это ещё больший ахтунг
mva
как ахтунгом было бы, если ты из сторонней веб-морды на чём-то не являющимся lua, запускаешь lua-скрипт, который запускаешь fs_cli, который, в свою очередь, опять запускает lua-скрипт
vitaly
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
т.е. в случае интерпретатора - это та директория в которой у тебя открыт шелл
mva
в случае FS - это (явно другая, точный путь можешь узнать сделав ls -l /proc/<pid_фрисвитча>/cwd
mva
так что советую указывать полный путь
mva
а ещё положить тестовый файл в /tmp
mva
чтобы избежать проблем с правами
halt
ок. сейчас попробую
halt
Вставил полный путь - заработало. Теперь нужно сделать чтобы звонок по одному уходил (не запускался новый пока разговаривают по текущему вызову)
Viacheslav
Добрый вечер. Есть ли смысл использовать LuaJIT, если целевая платформа JIT не поддерживает? У кого-нибудь есть личный опыт сравнения их интерпретатора с ванильным 5.2?
Snusmumriken
Что конкретно хотел?