MyDC.ru _ Программирование на Lua _ Как вызвать bash скрипт из Lua
Автор: Iskandark 23.2.2015, 21:58
Всем привет! Есть задача вызвать bash скрипт (в Linux) из Lua. Скрипт например может выполнять синхронизацию времени, отправку email или что угодно другое.
Ничего не изменилось: в /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 файла, то без проблем отрабатывается...