Новые книги

Эта книга полностью обновлена и тщательно пересмотрена. Она является необходимым пособием для руководителей информационных служб, технических консультантов и системных администраторов R/3, которые хотят иметь полное представление об администрировании Basis.

Знания, полученные "из первых рук" от различных специалистов SAP Global Support, работавших над реализацией более 20000 систем R/3, служат основой этой книги, которая научит выполнять все критически важные задачи системного администрирования с оптимальной эффективностью. Она учит быстро принимать правильные решения в сложных ситуациях, используя рекомендации экспертов и ценные рекомендации из реального мира, которые делают это уникальное пособие необходимым для повседневного использования.

Кроме всего прочего, эта книга является ценным источником, помогающим подготовиться к экзамену СТС (Certified Technical Consultant) no R/3 Release 4.6C и Enterprise.

В руководстве рассмотрены:

# Настройка системной инфраструктуры.

# Администрирование клиента.

# Пользователи и полномочия.

# Фоновая обработка.

# Архивирование данных.

# Администрирование спула.

# Обслуживание инстанций.

# Системный мониторинг.

И многое другое.
Возвращение знаменитого бестселлера. Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development – разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелые выводы. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой методики. В книге приведены два программных проекта, целиком и полностью реализованных с использованием TDD. За рассмотрением примеров следует обширный каталог приемов работы в стиле TDD, а также паттернов и рефакторингов, имеющих отношение к TDD. Книга будет полезна для любого программиста, желающего повысить производительность своей работы и получить удовольствие от программирования.

Using chat to Automate Dialing

Использование скрипта для автоматического дозвона

Одна из вещей, которые могут испугать Вас как неудобные в вышеизложенном примере то, что Вы должны установить связь вручную прежде, чем запустить pppd. В отличие от dip, pppd не имеет собственного языка скриптов для набора номера и регистрации, а полагается на внешнюю программу или shell-скрипт для того, чтобы сделать это. Команда, которая будет выполнена, может быть передана pppd опцией connect командной строки. pppd переназначит ввод и вывод к последовательной линии. Пакет pppd имеет очень простую программу chat для этих целей.

Хорошая альернатива для этого expect, написанная Don Libes. Она имеет очень мощный язык, основанный на Tcl, и была разработана для этого типа приложений. Именно ее стоит использовать в случае длинного и сложного процесса входа в систему.

Программа chat позволяет Вам определить скрипт в стиле UUCP. В основном скрипт состоит из последовательности чередующихся строк, которые ожидается получить от удаленной системы, и ответов, которые мы должны ей послать. Мы будем называть expect и send строки, соответственно для приема и передачи. Типичная часть chat-скрипта:

ogin: b1ff ssword: s3|<r1t

Он сообщает chat, что нужно ждать ответ удаленной системы с запросом имени пользователя (login prompt) и вернуть ей в ответ имя b1ff. Мы ждем только ogin: таким образом, не имеет значения с символа в верхнем или нижнем регистре начинается запрос, или он приходит искаженным. Следующяя строка заставит chat ждать запрос пароля и послать свой пароль в ответ.

Это, в основном, все то, для чего предназначены chat-скрипты. Полный скрипт для соединения с PPP-сервером должен включать соотствующие команды модема. Допустим, что модем понимает Hayes команды, и номер телефона сервера 318714. Полный вызов chat для установки связи с c3po:

$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN

По определению, первая строка должна быть expect-строкой, но так как модем не будет сообщать что-нибудь прежде, чем мы запустим его, запустим chat так, чтобы он сначала ожидал пустую строку. Мы посылаем ATZ, команду reset для Hayes-совместимых модемов и ждем реакцию (OK). Следующая строка посылает команду dial с номером телефона для chat и ожидает сообщение CONNECT в ответ. За этим снова следует пустая строка, потому что мы не хотим ничего посылать, но надо подождать для быстрого входа в систему. Остальная часть chat-скрипта работает точно так же, как описано выше.

Опция -v сообщает chat о необходимости вести подробный протокол средствами демона syslog вызовом local2.

Определение chat-скрипта в командной строке несет оправданный риск, потому что пользователи могут просматривать командную строку любого процесса с использованием команды ps. Вы можете избежать этого, помещая chat-скрипт в файл, скажем dial-c3po. Вы можете заставить chat взять скрипт из файла вместо командной строки, передавая ему опцию -f, сопровождаемую именем файла. Наш скрипт dial-c3po будет выглядеть так:

''      ATZ
OK      ATDT318714
CONNECT ''
ogin:   ppp
word:   GaGariN
Слева написаны строки, которые мы ждем, справа наши ответы на них для передачи удаленной машине.

Вызов pppd будет таким:

# pppd connect "chat -f dial-c3po" /dev/ttyS3 38400 -detach \
        crtscts modem defaultroute

Помимо опции connect, которая определяет скрипт дозвона, мы добавили еще две опции в командной строке: -detach, которая сообщает pppd не отделяться от консоли и стать фоновым процессом. Ключевое слово modem заставит его выполнить некоторые действия, специфичные для модема, на последовательном устройстве, подобно "повесить трубку" после вызова. Если Вы не используете это ключевое слово, pppd не будет определять линию DCD и не обнаружит неожиданного обрыва связи.

Примеры, показанные выше были довольно просты; chat позволяет создавать намного более сложные скрипты. Одна очень полезная особенность, это способность к точному определению строки, на которой можно прервать chat с сообщением об ошибке. Типичные аварийные строки BUSY или NO CARRIER, которые модем обычно генерирует, когда вызываемый номер занят или не поднимает трубку. Для того, чтобы сделать так, чтобы chat их распознавал, Вы можете определить начало скрипта, используя ключевое слово ABORT:

$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...

В подобном режиме Вы можете изменить значение блокировки по времени для частей скрипта, вставляя опции TIMEOUT.

Иногда нужно иметь возможность условного выполненич частей скрипта. Например, когда Вы не получаете запрос имени пользователя с удаленной машины, возможно, стоит послать BREAK или возврат каретки. Вы можете достичь этого, присоединяя sub-скрипт к expect-строке. Он состоит из последовательности send и expect строк точно таких же, как и обычный скрипт. Sub-скрипт отделяется тире и выполняется всякий раз, когда не было ничего получено в качестве ожидаемой строки. В примере, изложенном выше, мы модифицировали бы chat-скрипт следующим образом:

ogin:-BREAK-ogin: ppp ssword: GaGariN

Теперь, когда chat видит, что удаленная система не посылает запрос на вход в систему, sub-скрипт выполняется, сначала посылая BREAK, а затем снова ожидает запрос для входа в систему. Если теперь запрос появится, то основной скрипт будет продолжаться как обычно, иначе он прервется с сообщением об ошибке.