|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (1)
просмотр истории страницы... |
# Проверьте что правило добавляется из командной строки до того как добавлять его в скрипт hooks # Если произошла ошибка добавления правила, информацию о ней можно попробовать найти в логе */var/log/messages* (или выполнив команду *dmesg*) |
h1. При запуске системы, вижу ошибку выполнения скрипта, что делать? Например: {code} [root@vm185-120 ~]# /app/xge/service start /app/xge start /cfg/hooks: line 8: syntax error near unexpected token `fi' /cfg/hooks: line 8: `fi' Ошибка 2 при запуске hook файла: /cfg/hooks /genconfig crond start Необходимо исправить hook файл! Копирую модули XGE (pid 6001) is running... Reloading Base Web Server: [ OK ] # /app/xge/service start: [FAILED] {code} Попробуйте отладить скрипт, максимально его сократив, убрав все команды и операторы, добавляйте их постепенно. Например, у Вас есть скрипт: {code} #!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; tnen iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dest-port 10000 -j DNAT --to-destination 10.100.0.11:10000 ip route add 10.0.0.2 dev Eeth2 ip route add 0/0 via 10.0.0.2 fi exit 0 {code} Сделайте следующее: {info}Не обязательно постоянно для проверки перезапускать контейнер командой _/app/<app>/service restart_, можно передать параметры напрямую скрипту: {code}bash -x /app/xge/cfg/hooks /etc/init.d/firewall start{code}{info} *bash -x* - это выполнение скрипта с отладкой. # Попробуйте удалить все строки в условии и оставьте там пустой оператор, приведите скрипт к такому виду: {code}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; tnen : fi exit 0{code} Данный пример все равно завершится ошибкой, в скрипте опечатка: вместо "*t{color:blue}h{color}en*" написано "*t{color:red}n{color}en*" # Когда разобрались с синтаксисом, возвращайте все что было в условии постепенно, начните с правила iptables: {code}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; tnen iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dest-port 10000 -j DNAT --to-destination 10.100.0.11:10000 fi exit 0{code} Скрипт так же завершитсяс ошибкой. Вы выоде скрипта мы увидем что она заключается в некорректном формировании правила: {code}# /app/xge/cfg/hooks /etc/init.d/firewall start iptables v1.4.7: unknown option `--dest-port' Try `iptables -h' or 'iptables --help' for more information.{code} После изучения документации по фаерволу "*\-\-d{color:red}est-{color}port*" заменили на "*--dport*" и команда выполнилась успешно. # Далее вернули настройку маррутизации и снова попроловали выполнить: {code:title=Скрипт}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; then iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dport 10000 -j DNAT --to-destination 10.100.0.11:10000 ip route add 10.0.0.2 dev Eeth2 ip route add 0/0 via 10.0.0.2 fi exit 0{code} {code:title=Результат выполнения}# /app/xge/cfg/hooks /etc/init.d/firewall start Cannot find device "Eeth2" RTNETLINK answers: File exists{code} Мы получили ошибку того что устройство "Eeth2" не найдено. Все верно - у нас нет устройства с таким именем. Проверив настройки сети имена интерфейсов приходим к выводу что настроить нужно интерфейс eth2: было "*ip route add 10.0.0.2 dev {color:red}E{color}eth2*", стало "*ip route add 10.0.0.2 dev eth2*" # Выполняем исправленный скрипт {code:title=Скрипт}#!/bin/bash if [ "$1" = "/etc/init.d/firewall" -a "$2" = "start" ]; then iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dport 10000 -j DNAT --to-destination 10.100.0.11:10000 ip route add 10.0.0.2 dev eth2 ip route add 0/0 via 10.0.0.2 fi exit 0{code} {code:title=Результат выполнения}# /app/xge/cfg/hooks /etc/init.d/firewall start RTNETLINK answers: File exists {code} Воспользовавшись [поиском Google|https://www.google.com/search?client=ubuntu&channel=fs&q=RTNETLINK+answers%3A+File+exists&ie=utf-8&oe=utf-8] можно найти информацию по ошибке. Так же можно выполнить скрипт с повышенным логированием: {code}# bash -x /app/xge/cfg/hooks /etc/init.d/firewall start + '[' /etc/init.d/firewall = /etc/init.d/firewall -a start = start ']' + iptables -t nat -I xge_pre -d 10.0.0.2 -p tcp --dport 10000 -j DNAT --to-destination 10.100.0.11:10000 + ip route add 10.0.0.2 dev eth2 RTNETLINK answers: File exists + ip route add 0/0 via 10.0.0.2 RTNETLINK answers: File exists + exit 0{code} Теперь ошибка повторяется дважды. В данно случае проблемы не было: ядро по-сути сообщало что такое правило уже существует, первый раз так как команда "ip route add 0/0 via 10.0.0.2" все-таки выполнилась на одной из предыдущих итераций; второй раз - так как на предпоследней интерации проверки выполнилась и команда "ip route add 10.0.0.2 dev eth2" Надеемся это поможем Вам отлаживать скрипты запуска. Общий принцип - если сразу не понятно где ошибка, максимально сократите и полняйте постепенно исправляя ошибки и добавляя слеующие пункты конечного скрипта. |