Как вызвать bash скрипт из Lua |
Здравствуйте, гость ( Вход | Регистрация )
Как вызвать bash скрипт из Lua |
23.2.2015, 21:58
Сообщение
#1
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
Всем привет!
Есть задача вызвать bash скрипт (в Linux) из Lua. Скрипт например может выполнять синхронизацию времени, отправку email или что угодно другое. Возможно ли из Lua выполнить bash скрипт? |
|
|
24.2.2015, 6:42
Сообщение
#2
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Возможно.
|
|
|
25.2.2015, 11:09
Сообщение
#3
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
Пробую из lua вызвать bash скрипт:
Код os.execute('/var/myscripts/synctime.sh') Скрипт выполняет синхронизацию времени, отдельно он запускается. Вот содержимое synctime.sh: Код #!/bin/bash /usr/sbin/ntpdate-debian >> /var/log/synctime.log Но в итоге хаб намертво зависает, а в процессах висит зависший процесс с исполнением /usr/sbin/ntpdate-debian Пока его не убить, не отвисает... |
|
|
25.2.2015, 20:45
Сообщение
#4
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 12.11.2009 Пользователь №: 5 019 Спасибо сказали: 15 раз |
Запускай ntpdate с ключом -v и логируй все.
Код /usr/sbin/ntpdate -v pool.ntp.org >> /var/log/synctime.log 2>> /var/log/synctime_error.log
|
|
|
25.2.2015, 21:02
Сообщение
#5
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
Запускай ntpdate с ключом -v и логируй все. Код /usr/sbin/ntpdate -v pool.ntp.org >> /var/log/synctime.log 2>> /var/log/synctime_error.log В /var/log/synctime_error.log пусто. А вот в /var/log/synctime.log написало: Код 25 Feb 21:57:00 ntpdate[962]: ntpdate 4.2.6p5@1.2349-o Sat May 12 09:54:56 UTC 2012 (1)
|
|
|
25.2.2015, 21:41
Сообщение
#6
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 12.11.2009 Пользователь №: 5 019 Спасибо сказали: 15 раз |
Хорошо, добавь тогда еще и -d
|
|
|
25.2.2015, 22:39
Сообщение
#7
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
Хорошо, добавь тогда еще и -d Для случая: Код /usr/sbin/ntpdate -v -d pool.ntp.org >> /var/log/synctime.log 2>> /var/log/synctime_error.log Ничего не изменилось: в /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)" Для случая: Код /usr/sbin/ntpdate -v pool.ntp.org >> /var/log/synctime.log 2>> /var/log/synctime_error.log -d В /var/log/synctime_error.log появилась запись: Код 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) |
|
|
26.2.2015, 0:44
Сообщение
#8
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 12.11.2009 Пользователь №: 5 019 Спасибо сказали: 15 раз |
интересно
а если просто так запустить с ключами -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 |
|
|
26.2.2015, 10:22
Сообщение
#9
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
|
|
|
26.2.2015, 16:43
Сообщение
#10
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 12.11.2009 Пользователь №: 5 019 Спасибо сказали: 15 раз |
Делаем вывод, что при запуске из lua что-то отличается от обычного запуска.
Выполни /usr/bin/printenv > /tmp/env просто так и /usr/bin/printenv > /tmp/env_lua с хаба. Сравни что отличается. |
|
|
26.2.2015, 22:40
Сообщение
#11
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
Делаем вывод, что при запуске из lua что-то отличается от обычного запуска. Выполни /usr/bin/printenv > /tmp/env просто так и /usr/bin/printenv > /tmp/env_lua с хаба. Сравни что отличается. Явных различий не заметил, кроме кодировки... Вот: /usr/bin/printenv > /tmp/env SHELL=/bin/bash TERM=xterm SSH_CLIENT=######## SSH_TTY=/dev/pts/0 USER=root MC_TMPDIR=/tmp/mc-root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MAIL=/var/mail/root PWD=/ LANG=en_US.UTF-8 PS1=\h:\w\$ HISTCONTROL=ignorespace HOME=/root SHLVL=2 MC_SID=22170 LOGNAME=root SSH_CONNECTION=#################### OLDPWD=/tmp _=/usr/bin/printenv /usr/bin/printenv > /tmp/env_lua MAIL=/var/mail/root SSH_CLIENT=######### USER=root SHLVL=2 HOME=/root OLDPWD=/ SSH_TTY=/dev/pts/0 PS1=\h:\w\$ LOGNAME=root _=/etc/init.d/ptokax4test TERM=xterm MC_SID=22170 HISTCONTROL=ignorespace PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MC_TMPDIR=/tmp/mc-root LANG=ru_RU.CP1251 SHELL=/bin/bash PWD=/ SSH_CONNECTION=############# IP заменил на #### Попробовал из lua выполнить os.execute('ntpdate-debian') без bash скрипта. Опять процесс завис, значит дело не в bash, а в этом в команде "ntpdate-debian" Хотя в консоли без lua отрабатывает без проблем. |
|
|
27.2.2015, 9:07
Сообщение
#12
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 12.11.2009 Пользователь №: 5 019 Спасибо сказали: 15 раз |
ntpdate-debian это просто скрипт-враппер над обычным ntpdate
вместо него достаточно вызывать просто /usr/sbin/ntpdate pool.ntp.org я думаю LANG может иметь значение попробуй в скрипте который вызываешь написать так Код LANG=en_US.UTF-8; /usr/sbin/ntpdate -v -d pool.ntp.org >> /var/log/synctime.log 2>&1 с другой стороны, возможно это что-то со стороны lua пробовал свой скрипт запускать фоном? Код os.execute('/var/myscripts/synctime.sh &')
|
|
|
27.2.2015, 10:12
Сообщение
#13
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
Запихал в sh скрипт "LANG=en_US.UTF-8; /usr/sbin/ntpdate -v -d pool.ntp.org >> /var/log/synctime.log 2>&1"
При выполнении через lua результат старый - процесс синхронизации висит в задачах При выполнении через консоль - выполняется корректно При запуске sh скрипта в фоне из lua результат почти такой же - процесс синхронизации висит в задачах за исключение того, что хаб не зависает и не ждет ответа от выполнения... |
|
|
27.2.2015, 17:10
Сообщение
#14
|
|
Участник Группа: Пользователи Сообщений: 36 Регистрация: 12.11.2009 Пользователь №: 5 019 Спасибо сказали: 15 раз |
у меня кончились идеи
если только запускать gdb и смотреть на какой операции ntpdate виснет а это только с ntpdate происходит? |
|
|
3.3.2015, 12:42
Сообщение
#15
|
|
Активный участник Группа: Пользователи Сообщений: 61 Регистрация: 24.10.2008 Из: Moscow Пользователь №: 875 Спасибо сказали: 0 раз |
у меня кончились идеи если только запускать gdb и смотреть на какой операции ntpdate виснет а это только с ntpdate происходит? Проверил, только с ntpdate такое происходит. Если в bash скрипт вставить строки с исполнением lua файла, то без проблем отрабатывается... Значит дело не в bash, а в ntpdate... |
|
|
Похожие темы
|
Сейчас: 26.11.2024, 20:58 |