четверг, 13 января 2011 г.

No script

Вот и выросло поколение системных администраторов и DBA, не владеющих одним из основополагающих навыков - скриптингом.

Не владеющих никак. Ни на уровне самостоятельно написать что-то сложнее, чем "echo 'Hello, world!'", ни даже на уровне "прочитать и понять, что скрипт делает". И, более того, неспособных и не желающих даже прочитать readme к скрипту, буде таковой имеется!

Я приведу один простой пример.

Oracle на *nix работает, в общем, не со вчерашнего дня.

Но там нет одной ма-аленькой мелочи - автостарта сервисов Oracle.

С одной стороны, с некоторых пор в *nix-овых дистрах Oracle есть скрипты dbstart/dbshut. Между нами - девочками, вы видели эти скрипты? Они ублюдочные и это мягко сказано. Я бы поостерегся такой фэйк запускать. Ненужный и нелогичный код. Ни намека на структурность. Необходимость дописывания или серьезных переделок для мало-мальски нетривиальных энвайронментов.

Кроме того, в некоторых системах автостарт сервисов реализован не через линки rcX.d.

Как это так? Правда, сюрприз?

Да вот так, опаньки! Давайте посмотрим, что нашел гугл.

В первой позиции находится...А, мама, роди меня обратно!

Автор, представляющийся как OCP 10/11, даже не знает, что в Solaris 10 вот уже лет шесть минимум действует схема SMF-запуска сервисов. И запускные скрипты уже давно не лежат в /etc/init.d, а вовсе в /lib/svc/method. Соответственно, схема с линками устарела и надо регистрировать сервис посредством команд SMF (очень удобно, кстати. Всякие там upstart/startd рядом не валялись. И мониторинг состояния, и availability, и прочие вкусности давно реализованы. Но мы ж легких путей не ищем, да и то - решение, как я уже говорил, должно полежать в земле десяток лет, чтобы стухло хорошенько - как мясо для медведей - чтобы стать пригодным в пищу айтишникам. "Зрелое решение" - это то, которое давно сдохло либо приближается к оному. Но это лирика).

Господа DBA! Решение - написать свой собственный сервис автозапуска, причем можно сделать это гораздо лучше. Не бином Ньютона ведь - а пара-тройка борновских скриптов, один для управления и пара для установки и удаления автостарта.

Зато какая ляля - ставишь, допустим, очередную БД - и сразу - бенц! - скрипт выполнил, установил, reboot - и готово. И это насовсем. Не дай бог, сбойнул UPS в ваше отсутствие - не надо лететь сломя голову посреди ночи в пижаме на работу, дабы руками поднять необходимые службы.

Нет же, блин. "Мыши плакали, кололись, но продолжали есть кактус." (С)

За более, чем четырнадцать лет работы с Oracle на UNIX я видел всего пару попыток написать собственный кошерный сервис автоматического запуска. Одну из них - в зеркале.

Да, я убил достаточно много времени на написание и тестирование на поддерживаемых платформах. Но зато в дальнейшем мне не надо изгаляться при установке очередной системы, создавая линки и, с матами, редактированием оракловых нативных запускных скриптов и правкой oratab и другими заморочками.

Ну ленивый я, как всякий правоверный сисадмин. Мне влом даже такие типовые действия, как редактирование oratab и создание линков выполнять. Ко всему, моя основная платформа давно ушла вперед от rcX.d.

Я это делаю одной командой. install.sh. Все.

А для возвращения к мазохизму рукопашного запуска - remove.sh.

На мой взгляд, получилось весьма неплохое решение. "Лучше день потерять - потом за пять минут долететь".

Что, думаете, благодарное сообщество растащило с довольным урчанием по углам?

Как бы не так!

"Граната у тебя не той системы!" (С)

- Ах-ох, заголовки скриптов не по стандарту Fedora! (Чхал я на федору с ее самопальными стандартами, скрипты написаны по моим собственным стандартам, и основные методы start, stop, restart поддерживают. А вообще все это писалось для Solaris primary)
- Ах-ох, нету метода status у запускного скрипта! (эй, а вы в курсе, что у половины процессов Oracle нету pid-файла? И даже проверка процесса командой ps не гарантирует, что сервис жив? Там, если что, лог есть, в котором можно посмотреть статус запуска/останова, а в Solaris 10 для работающих сервисов есть команда svcs!)
- Ах-ох, зачем столько сложностей с этим.... как его... SMF? Просто создай линки и все! (Бином Ньютона - SMF. Штатная подсистема Solaris 10 и выше, если что)
- Ах-ох, не запускается CSS! (Ребята, а это ничего, что на всех платформах, включая Windows, есть штатная оракловая команда localconfig add, добавляющая необходимый сервис в автоматический запуск? Эксперты по RAC сертифицированные, блин! Кстати, да, ораклиный скрипт запуска ocss.bin ужасен. Не соответствует никаким "стандартам" линуска. Зато он кроссплатформенный. Ничего не напоминает?)
- Ах-ох, это ж целый сервис устанавливается! А зачем, когда можно линки создать итп. (А это ничего, что в Windows oradim тоже устанавливает сервисы - да еще и не один? В SMF это тоже называется "сервис", для остальных систем там за вас install.sh линки-то и создаст где надо. Ну а если хочется ручками запускать - так есть remove.sh, чисто удаляющий все следы автостарта - где проблема-то? И, кстати - это ничего, что CSS тоже устанавливается в вашу систему как сервис?)
- Ах-ох, зачем это вообще было писать, когда можно .... (далее по вкусу). (Зачем - написано в readme в первом абзаце, но об этом чуть ниже)

И - (барабанная дробь) - коммент номер один:

- ... Дальше я просто не стала читать (readme - примечание мое)

А я-то, дурак, считал, что хотя бы маны курить - это основополагающий навык админов. Мне, например, совсем не хотелось читать мануалы Оракла - они же огромные, да написаны та-аким английским, что улыбнешься. Ну, а если уж мы маны читать не осиливаем - то написать скрипт нам и вовсе не по зубам, куда там.

Заметьте, никто не попытался сказать "Эй, смотри - а я написал лучше!". Нифига подобного. Расшибутся в лепешку в поисках написанного кем-то по рекомендации неведомо кого на форуме, но потрудиться научиться писать скрипты самим - это ж надо мозг напрягать! Ну нах... Сказано было лишь - "А это уже написано и пофигу, что стремно - нас этот кактус устраивает".

Если бы это был единичный случай! Вы посмотрите по сторонам! Окошечники не умеют писать батники. Так называемые юниксоиды и линуксоиды в принципе не утруждают себя изучением скриптовых возможностей своих шеллов. В моей практике был феерический случай, когда для разовой обработки CSV-файла MSCE предложил написать программу на Visual Studio! И это при том, что в cmd.exe есть нативный цикл for с непосредственной обработкой полей CSV и достаточно прочитать хепл командой help for.

Жесть, не правда ли?

Господа аццкие мега одмины!

1. Учите матчасть тщательней. Следите за новостями из вашего собственного профессионального мира, в нем иногда происходят изменения. А не просто торчите в онлайновых игрищах и дурацких форумах в уверенности, что вы уже знаете все на светенеобходимое.
2. Выучите, наконец, хотя бы один скриптовый язык. Он позволит вам сэкономить ваше собственное рабочее и личное время. Как минимум, будете понимать написанное другими, нормальными админами.
3. Когда выучите скриптинг как следует - сможете не дурацки критиковать написанное не вами (фатальный недостаток, не правда ли?), а засучить рукава и написать лучше. Если уж на то пошло. А не жрать кактус, написанный когда-то недоучившимся студентом или - какой ужас! - не вами.

Компрене ву?