MyDC.ru _ Программирование на Lua _ Как вызвать bash скрипт из Lua
Автор: Iskandark 23.2.2015, 21:58
Всем привет! Есть задача вызвать bash скрипт (в Linux) из Lua. Скрипт например может выполнять синхронизацию времени, отправку email или что угодно другое.
Возможно ли из Lua выполнить bash скрипт?
Автор: Alexey 24.2.2015, 6:42
Возможно.
Автор: Iskandark 25.2.2015, 11:09
Пробую из lua вызвать bash скрипт:
Код
os.execute('/var/myscripts/synctime.sh')
Скрипт выполняет синхронизацию времени, отдельно он запускается. Вот содержимое synctime.sh:
Код
#!/bin/bash
/usr/sbin/ntpdate-debian >> /var/log/synctime.log
Но в итоге хаб намертво зависает, а в процессах висит зависший процесс с исполнением /usr/sbin/ntpdate-debian
Ничего не изменилось: в /var/log/synctime_error.log пусто, а в /var/log/synctime.log написало тоже самое "25 Feb 23:13:12 ntpdate[2042]: ntpdate 4.2.6p5@1.2349-o Sat May 12 09:54:56 UTC 2012 (1)"
Error resolving -d: Name or service not known (-2) 25 Feb 23:14:28 ntpdate[2083]: Can't find host -d: Name or service not known (-2)
Автор: deseven 26.2.2015, 0:44
интересно а если просто так запустить с ключами -v и -d? типичный вывод должен быть такого плана
Код
26 Feb 02:43:45 ntpdate[22400]: ntpdate 4.2.6p5@1.2349-o Sat Dec 20 02:51:49 UTC 2014 (1) Looking for host 10.10.10.10 and service ntp host found : 10.10.10.10 transmit(10.10.10.10) transmit(10.10.10.10) transmit(10.10.10.10) transmit(10.10.10.10) transmit(10.10.10.10) 10.10.10.10: Server dropped: no data server 10.10.10.10, port 123 stratum 0, precision 0, leap 00, trust 000 refid [10.10.10.10], delay 0.00000, dispersion 64.00000 transmitted 4, in filter 4 reference time: 00000000.00000000 Thu, Feb 7 2036 11:28:16.000 originate timestamp: 00000000.00000000 Thu, Feb 7 2036 11:28:16.000 transmit timestamp: d898c094.530edaa3 Thu, Feb 26 2015 2:43:48.324 filter delay: 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 filter offset: 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 delay 0.00000, dispersion 64.00000 offset 0.000000
26 Feb 02:43:49 ntpdate[22400]: no server suitable for synchronization found
Автор: Iskandark 26.2.2015, 10:22
Цитата(deseven @ 26.2.2015, 0:44)
интересно а если просто так запустить с ключами -v и -d? типичный вывод должен быть такого плана ..
Если из консоли выполнить "ntpdate-debian -d", то вывод похож на представленный...
Автор: deseven 26.2.2015, 16:43
Делаем вывод, что при запуске из lua что-то отличается от обычного запуска. Выполни /usr/bin/printenv > /tmp/env просто так и /usr/bin/printenv > /tmp/env_lua с хаба. Сравни что отличается.
Автор: Iskandark 26.2.2015, 22:40
Цитата(deseven @ 26.2.2015, 16:43)
Делаем вывод, что при запуске из lua что-то отличается от обычного запуска. Выполни /usr/bin/printenv > /tmp/env просто так и /usr/bin/printenv > /tmp/env_lua с хаба. Сравни что отличается.
Явных различий не заметил, кроме кодировки... Вот:
Попробовал из lua выполнить os.execute('ntpdate-debian') без bash скрипта. Опять процесс завис, значит дело не в bash, а в этом в команде "ntpdate-debian"
Хотя в консоли без lua отрабатывает без проблем.
Автор: deseven 27.2.2015, 9:07
ntpdate-debian это просто скрипт-враппер над обычным ntpdate вместо него достаточно вызывать просто /usr/sbin/ntpdate pool.ntp.org
я думаю LANG может иметь значение попробуй в скрипте который вызываешь написать так
с другой стороны, возможно это что-то со стороны lua пробовал свой скрипт запускать фоном?
Код
os.execute('/var/myscripts/synctime.sh &')
Автор: Iskandark 27.2.2015, 10:12
Запихал в sh скрипт "LANG=en_US.UTF-8; /usr/sbin/ntpdate -v -d pool.ntp.org >> /var/log/synctime.log 2>&1"
При выполнении через lua результат старый - процесс синхронизации висит в задачах При выполнении через консоль - выполняется корректно
При запуске sh скрипта в фоне из lua результат почти такой же - процесс синхронизации висит в задачах за исключение того, что хаб не зависает и не ждет ответа от выполнения...
Автор: deseven 27.2.2015, 17:10
у меня кончились идеи если только запускать gdb и смотреть на какой операции ntpdate виснет
а это только с ntpdate происходит?
Автор: Iskandark 3.3.2015, 12:42
Цитата(deseven @ 27.2.2015, 17:10)
у меня кончились идеи если только запускать gdb и смотреть на какой операции ntpdate виснет
а это только с ntpdate происходит?
Проверил, только с ntpdate такое происходит. Если в bash скрипт вставить строки с исполнением lua файла, то без проблем отрабатывается...