Сисадмин нулевого уровня
Глава 1. Ночная смена
[02:47:12] ERROR backup_job #4471: target unreachable
Бэкап опять не доехал до хранилища, и в ту ночь это была единственная вещь, в которой я был уверен полностью, потому что за последнюю неделю он не доезжал шесть раз подряд и я уже относился к этой строке как к прогнозу погоды, который в отличие от настоящего хотя бы никогда не врет.
Хуже было то, что зависший бэкап держал блокировку на базе, и в половине третьего медицинская информационная система, которую в больнице называли просто МИС и любили примерно как очередь в регистратуру, легла целиком, вместе с историями болезней, назначениями и графиком отпусков, который ночью, к счастью, никому не нужен. Я снял блокировку, перезапустил службы и минут десять смотрел, как сервер поднимается, медленно и с одолжением, как человек, которого разбудили в три часа ночи и попросили найти в шкафу что-нибудь, чего там никогда не было.
Серверная больницы номер три занимает шесть квадратных метров в подвале корпуса А, и помещаются в ней два шкафа со стойками, кондиционер, который капает в пластиковое ведро, и вентилятор, замену которому я обещаю себе третий год. Сюда не доходят главврач, санэпидстанция и мобильная связь, поэтому я давно считаю это место лучшим кабинетом в здании, хотя кабинетом его, кроме меня, никто не называет, а табличка на двери до сих пор честно предупреждает, что здесь «Электрощитовая №2» и посторонним вход воспрещен.
Я жевал холодную шаурму из ларька у остановки, купленную еще в девять вечера на ужин и доедаемую теперь, как обычно, вместо завтрака, и смотрел в лог так, как нормальные люди смотрят на костер. Телефон на столе вздрагивал от сообщений, потому что Пинг, наш стажер, в три часа ночи не спал и считал меня единственным человеком в своей переписке, которому можно написать в такое время без последствий для отношений.
Пинг написал: «Ёрш, можно я завтра не приду, у меня экзистенциальный кризис», потом прислал мем с котом, спящим в серверной стойке, и следом уточнил, что кризис начнется после рейда, а рейд закончится часам к шести. Я ответил, что можно, заявление на кризис в двух экземплярах с визой заведующего отделением, и он прислал стикер с плачущим котом, на чем наша служебная переписка обычно и заканчивалась.
Тимура Ахмедова все звали Пингом с первого дня, потому что на собеседовании он первым делом спросил, какой у больничного интернета пинг до игровых серверов, и я тогда решил, что человек с ясными приоритетами в эникеях пригодится. Ему было двадцать четыре, он переехал в Тверь из Казани ради девушки, девушка через полгода его бросила и уехала обратно, а Пинг остался, вместе с десятью тысячами часов в онлайн-играх и привычкой комментировать любую жизненную ситуацию как квест с плохим балансом.
Прозвище Ёрш прилипло ко мне в первую же неделю с легкой руки кого-то из хирургов, и я давно перестал объяснять, что Ершов это фамилия и рыба тут ни при чем. Мне было сорок два, двадцать лет из них ушли на эксплуатацию, восемь в банке, где за час простоя считали деньги, и четыре здесь, где за час простоя считают людей, и сюда я, наверное, и пришел потому, что в больнице хотя бы понятно, зачем чинить. Платили тут вдвое меньше, и я считал это честной ценой за понимание, по крайней мере так я объяснял себе разницу в дни зарплаты.
Между делом я записал в блокнот «02:30 МИС лег, причина бэкап, причина бэкапа неизвестна» и подчеркнул последнее слово дважды. Блокнот был бумажный, в клетку, с загнутыми углами, и вел я его по банковской привычке, где после каждого инцидента полагалось писать постмортем, т.е. разбор того, что сломалось, почему и что сделать, чтобы оно не сломалось снова. В банке мои постмортемы читали три отдела и юрист, здесь их читал только я, зато очень внимательно.
На заставке телефона, под стикером с котом, была Соня, снятая летом на набережной, с мороженым и выражением лица человека, которого фотографируют против его воли. Ей было тринадцать, она жила с матерью в Москве, писала на питоне какие-то свои штуки и стеснялась мне их показывать, а я стеснялся спрашивать, и так мы и общались, в основном стеснением. Ольга ушла шесть лет назад с формулировкой «ты женат на дежурном телефоне», и спорить с ней было трудно, потому что телефон в тот момент как раз звонил.
* * *
Без восьми три зазвонил внутренний телефон на стене, и я снял трубку, уже догадываясь, кто это.
— Ершов, поднимись, — сказала Нина Викторовна и положила трубку раньше, чем я успел спросить, куда и зачем, хотя спрашивать было бессмысленно, потому что в такое время меня звали наверх ровно из одного места.
Я закинул на плечо сумку с кабелями, без которой не хожу даже в столовую, и пошел к лестнице. В сумке жили патч-корды, обжимка, тестер, три отвертки, изолента трех цветов и пакетик сушек на случай, если инцидент затянется, весила она килограмма четыре и за годы стала чем-то вроде протеза, без которого я чувствовал себя голым и бесполезным, как админ без доступа.
Наверху, у служебного входа корпуса А, на посту сидел Степаныч, Петр Степанович Гусев, бывший прапорщик и наш ночной охранник, человек с ладонями размером с мою сумку и терпением, которого хватило бы на три очереди в регистратуру. Он смотрел на кнопочном телефоне «Место встречи изменить нельзя», серию, если я правильно помню, четвертую, которую видел раз сорок, и экран у телефона был размером со спичечный коробок, но Степаныча это не смущало, ибо Жеглова он знал наизусть и смотрел, скорее, для компании.
— Опять твой ящик? — спросил он, не отрываясь от экрана.
— Ящик в порядке. Теперь реанимация зовет.
Он кивнул так, будто я доложил обстановку по смене, и протянул мне термос с чаем, а когда я отказался, сказал, все так же глядя в телефон:
— Если тяжелое что, зови.
Его телефон, кстати, был единственным устройством в больнице, которое за четыре года ни разу не попадало ко мне в ремонт, и я подозревал, что дело тут в хозяине, при котором любая техника на всякий случай ведет себя прилично.
Из корпуса А в корпус Б ночью можно попасть только через переход на втором этаже, длинную застекленную кишку метров на сорок, где зимой дует из каждой щели и пахнет хлоркой и мокрым бетоном. Днем по нему возят каталки и бегают интерны, ночью он пустой и гулкий, и шаги в нем звучат так, будто за тобой идет еще кто-то, отстающий ровно на полсекунды. Я прошел его, как обычно, быстрее, чем нужно, и сделал вид перед самим собой, что просто замерз.
Реанимация занимала третий этаж корпуса Б, двенадцать коек за стеклянной стеной, аппараты, которые дышали за людей, и пост с центральной станцией мониторинга, где на большом экране обычно горели двенадцать окошек с пульсом, давлением и сатурацией. Сейчас вместо зеленых цифр на экране висели серые квадраты с надписью «Нет связи», и над ними стояла Нина Викторовна Ланская, заведующая отделением, которая дежурила сама, потому что дежурить, кроме нее, было некому.
Ей было тридцать восемь, и выглядела она, как всегда в это время суток, человеком, который двадцать часов на ногах и намерен простоять еще столько же просто из принципа. На краю поста стояла ее кружка с кофе, налитым, судя по пленке сверху, часа два назад, и я ни разу не видел, чтобы она этот кофе допивала, хотя наливала его каждую смену.
— Опять у вас мониторы виснут, — сказала она вместо приветствия.
В этом «у вас» поместился весь отдел информационных технологий больницы номер три, т.е. я, Пинг и принтер в бухгалтерии, который тоже, по мнению бухгалтерии, был наш. Прикроватные мониторы при этом работали, пищали и показывали все как надо, просто картинка не доходила до поста, и сестрам приходилось бегать от койки к койке, а в реанимации, где четверо лежали на аппаратах ИВЛ, это означало примерно то же, что тушить пожар чайной ложкой, зато очень быстро.
Шкаф с коммутатором висел в коридоре за поворотом, и причину я нашел минуты за три, потому что за двадцать лет видел таких причин столько, что узнаю их по миганию лампочек. Все порты на свитче горели одновременно и бешено, как гирлянда в магазине электроники, а в два соседних порта был воткнут один и тот же короткий синий патч-корд, обоими концами, аккуратно и с явным старанием.
— Петля, — сказал я Нине, которая пришла следом. — Кто-то замкнул коммутатор сам на себя, пакеты бегают по кругу, сеть захлебнулась.
Она посмотрела на меня так, как, наверное, смотрела на интернов, докладывающих диагноз на латыни.
— Говори по-русски, Ершов.
— Кто-то взял провод и воткнул его обоими концами в одну коробку. Теперь сеть разговаривает только сама с собой и больше никого не слышит.
Нина секунду подумала, глядя на мигающий свитч, и лицо у нее при этом не изменилось совсем.
— У меня так главврач на планерках.
Я выдернул кабель, порты успокоились, на станции мониторинга одно за другим загорелись зеленые окошки, и кто-то из сестер за стеклом выдохнул так громко, что было слышно через дверь. Кто воткнул патч-корд, выяснить было невозможно, и подозреваемых было трое: санитарка, которая видит болтающийся провод и считает своим долгом его куда-нибудь пристроить, ремонтник кондиционеров и полтергейст, причем последний по статистике больницы номер три попадался чаще остальных.
Нина кивнула, что у нее означало «спасибо», «свободен» и «больше так не делай» одновременно, и налила мне из кофейника на посту пластиковый стаканчик. Кофе был холодный и горький, но я выпил его до дна, потому что отказаться, по ее меркам, было бы хуже, чем не прийти вовсе.
Перед уходом я по привычке заглянул в щитовую отделения, и на маленьком экране ИБП нашлась запись о трех коротких просадках напряжения за последний час, каждая меньше секунды, которых наверху никто не заметил, потому что лампы в больнице моргают так часто, что на это давно перестали смотреть. ИБП реанимации держал минут двадцать, если не включать ничего лишнего, и этого всегда хватало, чтобы генератор в подвале корпуса А завелся и подхватил нагрузку, а мне всегда хватало этих двадцати минут, чтобы нервничать в фоновом режиме.
— Что-то не так? — спросила Нина из-за спины.
— Сеть моргает. Схожу посмотрю генератор.
— Иди, — сказала она, и это слово у нее заменяло и разрешение, и просьбу.
* * *
Обратно я шел тем же переходом, мимо Степаныча, у которого Жеглов как раз объяснял про вора, который должен сидеть в тюрьме, и спустился в подвал. Генераторная была через стенку от серверной, ключ от нее висел у меня на связке, потому что электрик Василич работал днем, а ночью отвечать за все, что гудит, по негласной больничной логике полагалось тому, у кого есть сумка с проводами.
Дизель-генератор ДГУ-200 стоял посреди комнаты, большой, зеленый, в желтых наклейках с молниями, холодный, пустой и тихий, как и положено резервному генератору, который просыпается только тогда, когда пропадает город. Будить его полагалось автоматике ввода резерва, шкафу АВР на стене, где одно реле последние полгода залипало через раз, и я писал об этом главному инженеру три служебные записки, на все три получил ответ «запланировано» и подшил их в отдельную папку, которую про себя называл «тикеты в никуда».
Однажды, в феврале, реле залипло всерьез, и я заводил дизель руками, с Василичем на телефоне, который диктовал мне порядок действий голосом человека, которого разбудили посреди выходного. Я тогда записал этот порядок в блокнот и с тех пор помнил его на всякий случай: открыть топливный кран, прогреть свечи, держать пуск, пока двигатель не схватит, и только потом перекинуть нагрузку рубильником, а цена ошибки на любом шаге была простая и понятная, на третьем этаже корпуса Б начинал пищать ИБП реанимации.
Лампочка «Авто» на шкафу горела, топлива в баке было три четверти, и пока я светил фонариком телефона в щель между дверцами, из кожуха генератора донеслось что-то вроде царапанья, тихое и деловитое, как будто внутри кто-то устраивался на ночь. Я постучал по кожуху костяшками, царапанье затихло, и я решил, что это крысы, потому что крысы в подвалах больницы номер три жили дольше иных главврачей и чувствовали себя хозяевами примерно с тем же основанием.
В блокноте появилась строчка «АВР в авто, топливо 3/4, в кожухе крысы, сказать Василичу», и я вернулся в серверную, где меня ждали шаурма, лог и бэкап, который по-прежнему никуда не ехал.
Сев за стол, я еще раз открыл лог бэкапа и только тогда сообразил, что хранилище, до которого он не мог доехать всю неделю, стоит в корпусе Б, в том же коридоре на третьем этаже, и подключено к тому самому коммутатору, на котором кто-то так старательно замкнул петлю. Получалось, что патч-корд втыкали туда не первую ночь, днем кто-то другой его так же аккуратно вынимал, и вся неделя мелких глюков в корпусе Б объяснялась тихой борьбой двух ответственных людей, которые ни разу не встретились и, скорее всего, никогда не узнают друг о друге.
Я перезапустил задание, и в 03:13 оно наконец поехало:
[03:13:41] INFO backup_job #4472: started
[03:13:55] INFO backup_job #4472: target ok, 2%
Я смотрел на эти два процента с чувством, которое у нормальных людей, наверное, бывает при виде первого снега, и потянулся за блокнотом, чтобы дописать в постмортем причину и вывод, что на шкаф в коридоре нужен замок, а замок, судя по опыту, будет запланирован.
Дописать я не успел, потому что в 03:14 погас свет, и погас он как-то неправильно.
* * *
Я много раз видел, как в больнице пропадает электричество, и обычно это происходит в одном и том же порядке: щелкает реле, ИБП в углу начинает пищать противным голосом, где-то наверху хлопает дверь щитовой, и секунд через десять-пятнадцать за стенкой с ревом просыпается дизель. В этот раз не щелкнуло ничего, ИБП не пискнул, вентилятор, который я третий год обещал заменить, остановился на полуобороте, капля из кондиционера, кажется, так и не долетела до ведра, а экран телефона на столе погас вместе со всем остальным, хотя к электросети не имел никакого отношения.
Стало темно, как бывает только под землей, и тихо, как в больнице не бывает никогда, потому что больница даже ночью гудит, пищит, капает, кашляет и вздыхает аппаратами, и я впервые за четыре года услышал, как в ухе стучит моя собственная кровь. Ощущение было такое, будто кто-то, не глядя, выдернул из розетки шнур, на котором висел весь мир, и теперь стоит рядом и раздумывает, куда воткнуть его обратно.
Я начал считать секунды, потому что любой админ при аварии первым делом считает, это помогает не думать, и на счете «четыре» вспомнил про реанимацию, про двадцать минут ИБП и про реле, которое залипает через раз, а на счете «шесть» сообразил, что если тут не пискнул даже мой ИБП, то наверху, скорее всего, молчит и тот, и никаких двадцати минут у четверых на аппаратах, возможно, нет вообще.
На счете «семь» прямо передо мной, на расстоянии вытянутой руки, загорелось окно, и я сначала решил, что это вернулся экран телефона, только почему-то поднялся со стола и повис в воздухе на уровне глаз.
Окно было полупрозрачное, бледно-голубое, с тонкой рамкой, как у программ из девяностых, и сквозь него была видна темнота серверной, контуры стоек и ведро под кондиционером. Я повернул голову, и окно повернулось вместе со мной, я закрыл глаза, и оно осталось на месте и даже стало четче, как будто веки были для него всего лишь еще одним слоем стекла, на который можно не обращать внимания.
В ту же секунду мир, видимо, решил, что пауза затянулась: в углу коротко и обиженно пискнул ИБП, вентилятор дернулся и загудел, в стойке замигали диоды, а через вентиляционную решетку под потолком, которая выходит в шахту рядом с лестницей, сверху посыпались голоса. Сначала закричала какая-то женщина, потом сразу несколько, потом мужской голос стал требовать у кого-то, чтобы это немедленно убрали у него с глаз, и все вместе было похоже на звук, с каким просыпается большое здание, где две сотни человек одновременно увидели один и тот же плохой сон.
Свет так и не зажегся, и дизель за стенкой молчал, но это я отметил как-то вскользь, тем краем сознания, который у админа никогда не выключается и продолжает вести учет, даже когда все остальное занято страхом.
Потом по лестнице спустился голос Степаныча, ровный, будто он докладывал о смене караула:
— Глеб Андреич, ты там живой? У меня тут перед глазами табличка висит, вся в буквах, а очки я в раздевалке оставил.
— Живой, — крикнул я в ответ. — У меня тоже табличка.
Только после этого я посмотрел, что написано на моей, и сразу понял, что у остальных, судя по крикам сверху, в этих окнах было что-то длинное и разборчивое, раз люди так быстро начали спрашивать друг у друга, что это значит, а мое окно было почти пустым, и только в самом верху мелким серым моноширинным шрифтом, к которому у меня за двадцать лет выработалась почти физиологическая привязанность, висела одна строка:
[03:14:07] WARN class_assign returned NULL
Я прочитал ее дважды, хотя хватило бы и одного раза, потому что такие строки двадцать лет видел в чужих логах и прекрасно знал, что они значат. Где-то очень далеко, там, где не было ни подвала, ни Твери, ни больницы номер три, работал скрипт, который прямо сейчас раздавал всем людям что-то важное, и на мне, на одной-единственной записи, этот скрипт споткнулся, ничего подходящего не нашел и честно вернул пустоту, как возвращает ее любая функция, которой нечего сказать.
Под строкой лога окно мигнуло, и в нем проступили еще две строки, крупнее и уже без всякой серой скромности:
[НАЗНАЧЕНИЕ КЛАССА]
Класс: NULL
Повторная попытка назначения через 00:00:59
Цифры в конце мигнули и сменились на 00:00:58, и я, вместо того чтобы испугаться, как, наверное, полагалось нормальному человеку в темном подвале, поймал себя на сугубо профессиональном вопросе, который задаю при каждой аварии, а именно что будет, если повторная попытка тоже вернет пустоту, и сколько всего попыток у этой системы предусмотрено для таких, как я.
Спасибо за чтение
Вернуться к книге
