Привет, Хабр! Меня зовут Сергей Рыжков и я руководитель направления профессиональных сервисов в «Рег.ру». Рассказываю, как мы узнали, что строится новый дата-центр и решили посетить его еще до официального открытия. И не зря, было много интересного.
Евгений Мартынов @unlo
IT-руководитель, системный администратор
Файл дескриптор в Linux с примерами
14 мин
100KОднажды, на одном интервью меня спросили, что ты будешь делать, если обнаружишь неработающий сервис из-за того, что на диске закончилось место?
Конечно же я ответил, что посмотрю, чем занято это место и если возможно, то почищу место.
Тогда интервьюер спросил, а что если на разделе нет свободного места, но и файлов, которые бы занимали все место, ты тоже не видишь?
На это я сказал, что всегда можно посмотреть открытые файл дескрипторы, например командой lsof и понять какое приложение заняло все доступное место, а дальше можно действовать по обстоятельствам, в зависимости от того, нужны ли данные.
Интервьюер прервал меня на последнем слове, дополнив свой вопрос: «Предположим, что данные нам не нужны, это просто дебаг лог, но приложение не работает из-за того, что не может записать дебаг»?
«окей», — ответил я, «мы можем выключить дебаг в конфиге приложения и перезапустить его».
Интервьюер возразил: «Нет, приложение мы перезапустить не можем, у нас в памяти все еще хранятся важные данные, а к самому сервису подключены важные клиенты, которых мы не можем заставлять переподключаться заново».
«ну хорошо», сказал я, «если мы не можем перезапускать приложение и данные нам не важны, то мы можем просто очистить этот открытый файл через файл дескриптор, даже если мы его не видим в команде ls на файловой системе».
Интервьюер остался доволен, а я нет.
Тогда я подумал, почему человек, проверяющий мои знания, не копает глубже? А что, если данные все-таки важны? Что если мы не можем перезапускать процесс, и при этом этот процесс пишет на файловую систему в раздел, на котором нет свободного места? Что если мы не можем потерять не только уже записанные данные, но и те данные, что этот процесс пишет или пытается записать?
Конечно же я ответил, что посмотрю, чем занято это место и если возможно, то почищу место.
Тогда интервьюер спросил, а что если на разделе нет свободного места, но и файлов, которые бы занимали все место, ты тоже не видишь?
На это я сказал, что всегда можно посмотреть открытые файл дескрипторы, например командой lsof и понять какое приложение заняло все доступное место, а дальше можно действовать по обстоятельствам, в зависимости от того, нужны ли данные.
Интервьюер прервал меня на последнем слове, дополнив свой вопрос: «Предположим, что данные нам не нужны, это просто дебаг лог, но приложение не работает из-за того, что не может записать дебаг»?
«окей», — ответил я, «мы можем выключить дебаг в конфиге приложения и перезапустить его».
Интервьюер возразил: «Нет, приложение мы перезапустить не можем, у нас в памяти все еще хранятся важные данные, а к самому сервису подключены важные клиенты, которых мы не можем заставлять переподключаться заново».
«ну хорошо», сказал я, «если мы не можем перезапускать приложение и данные нам не важны, то мы можем просто очистить этот открытый файл через файл дескриптор, даже если мы его не видим в команде ls на файловой системе».
Интервьюер остался доволен, а я нет.
Тогда я подумал, почему человек, проверяющий мои знания, не копает глубже? А что, если данные все-таки важны? Что если мы не можем перезапускать процесс, и при этом этот процесс пишет на файловую систему в раздел, на котором нет свободного места? Что если мы не можем потерять не только уже записанные данные, но и те данные, что этот процесс пишет или пытается записать?
+136
Энергия, тепло и вода
7 мин
7.6KПредисловие
2019 год. Почти в любом магазине электроники можно купить один из сотен возможных наборов умного дома. Взять и настроить в «2 клика», подключиться к облакам, получать push event-ы в приложение/смс-ки, да и вообще получать всю необходимую информацию в любой точке мира.
Идеально, но в моём случае не сработало. Несколько попавших ко мне в руки решений на деле оказались ограниченным набором определенных функций, покрывающих лишь часть моих запросов, а к тому же — накладывающих почти непреодолимые ограничения. И, как это обычно бывает, чем меньше ограничений, тем больше нужно погружаться в предметную область, самостоятельно продумывать решения, архитектуры. Поэтому — колхозим сами :)
Задачи
1. получать информацию о качестве электросети (скачки напряжения, полное отключение и т.п.).
2. иметь полный мониторинг UPS. А на самом деле иметь этот самый UPS исходя из последствий п2.
3. получать информацию о температуре:
- на улице
- дома
- на чердаке (когда замёрзнет закинутый туда хлам и помидоры)
4. Следить за состоянием потребления воды, алертить если потребление выросло (вдруг протечка, всё датчиками влаги не обвешаешь).
5. Понимать когда дома кто-то есть, чтобы автоматизировать перекрытие/открытие воды.
6. Снятие показаний газового счетчика и alert когда кончается оплаченный запас.
+ прочие всевозможные датчики (влажности, открытия, давления воды, давления в контуре отопления и т.п.).
Глобальная цель — иметь общий интерфейс, где можно будет на всё это посмотреть. Получать нотайсы, если что-то пошло не так.
Состав комплекса на текущий момент
- UPS Энергия ПН-750 + батарея на 100 ач
- USB->RS232 converter на основе PL2303
- Router Tp-link tl-wr1043nd +
- 1wire мастер сети на основе купленного USB термометра DS18B20+ PL-2303TA
- 1wire 3 датчика DS18B20
- 1wire модуль «счетчик воды» от radioseti на основе DS2423
Виртуалка с Zabbix-сервером за пределами домашней сети.
+14
Информация
- В рейтинге
- Не участвует
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность