Pull to refresh
  • by relevance
  • by date
  • by rating

Inotify или автоматизация рутинных операций с помощью incron

Configuring Linux *
До сих пор на хабре еще никто не упоминал о такой удобной подсистеме ядра linux, как inotify и использовании ее в автоматизации работы системного администратора. Хотелось бы восполнить этот пробел.

Что такое inotify


Inotify — это подсистема ядра Linux, которая позволяет получать уведомления об изменениях в файловой системе. Т.е. простыми словами — эта штука дает нам информацию о создании или изменении любого файла или директории в используемой файловой системе.
Inotify появилась в ядре аж в версии 2.6.13 и прошла проверку временем. Для ее использования написано несколько утилит, работу с одной из которых мы и рассмотрим.
Читать дальше →
Total votes 68: ↑66 and ↓2 +64
Views 39K
Comments 51

Torrent-файл. Что же у него внутри?

Decentralized networks

Введение


image
Добрый день.
Использую, как и многие, крупный торрент-трекер — rutracker.org, однако есть одна особенность которая меня раздражает.
Это добавление в список трекеров адреса ix*.rutracker.net, который служит для непонятных мне целей. Однако который часто (у меня — практически всегда) выдаёт ошибки (502 Bad Gateway и 0 No Response). Торрент-клиент (у меня Transmission) помечает торрент сломанным. Что само собой довольно сильно мне мешает. Особенно если учесть особенность Transmission — она задаёт статус торрента по последнему ответу трекера. То есть опрашиваем ix*, он возвращает ошибку, торрент помечается как Broken, через n минут/секунд опрашивается следующий трекер из списка — bt*.rutracker.org или retracker.local, которые возвращают успешный код и торрент снова становится нормальным. Такая чехарда не особо меня радует.

Решение банально — убрать этот нехороший адрес из списка. Однако файлов у меня много, из каждого вручную вырезать совсем не хочется, да и дополнительное действие при добавлении нового торрента выполнять тоже не было никакого желания. Поэтому принял решение разобраться в формате и автоматизировать удаление трекера из списка.
Читать дальше →
Total votes 146: ↑131 and ↓15 +116
Views 46K
Comments 56

Cкоростная синхронизация миллиарда файлов

Server Administration *
Sandbox
Есть несколько идентичных серверов (4 ноды) на Amazon EC2 с Ubuntu. Каждый генерирует и хранит у себя на диске кэш, который хотелось бы синхронизировать. Но простой rsync тут не подойдет — файлов несколько миллиардов, nfs — слишком медлителен, и т. д. Полный список рассмотренных вариантов с пояснениями ниже.

К тому же, время от времени нужно удалять устаревшие файлы сразу на всех серверах, что пока делается вручную и занимает несколько суток. Вопрос наиболее быстрой для такого Use Case файловой системы планирую описать позже. Оговорюсь только, что по нескольким причинам была выбрана XFS.

После теста нескольких кластерных технологий и файловых систем, по совету старшего товарища, решили использовать тот же rsync, но в связке с inotify. Немного поискав в интернете готовое такое решение, дабы не изобретать велосипед, наткнулся на csyncd, inosync и lsyncd. На хабре уже была статья о csyncd, но он тут не подходит, т.к. хранит список файлов в базе SQLite, которая вряд-ли сможет сносно работать даже с миллионом записей. Да и лишнее звено при таких объемах ни к чему. А вот lsyncd оказался именно тем, что нам и было нужно.

UPD: Как показала практика, необходимо ощутимое измение и дополние в тексте. Я решил внести лишь незначительные правки в основную часть, а новыми выводами поделиться в конце статьи.
Читать дальше →
Total votes 55: ↑55 and ↓0 +55
Views 86K
Comments 29

Автоматическое тестирование в PHP

IT systems testing *
Sandbox
Работа по TDD имеет очевидные преимущества: у разработчика всегда есть чётко описанная в виде теста цель, и он сразу узнает, когда она будет достигнута.
Тем не менее, есть и некоторые издержки: необходимо постоянно запускать один и тот же тест при изменениях в нем или в соответствующем классе, чтобы не пропустить тот самый момент истины. Вроде бы не такая уж и большая проблема, но постоянное переключение в консоль для проверки сделанных изменений на работоспособность, да и вообще помнить о необходимости этих манипуляций — лишнее рассеивание внимания.

Далее о том, как все это дело автоматизировать.

Читать дальше →
Total votes 30: ↑27 and ↓3 +24
Views 10K
Comments 14

Мониторинг за изменениями файловой системы

Python *
В поисках готового велосипеда для решения задачи мониторинга за изменениями в ФС с поддержкой linux+freebsd наткнулся на приятную python либу watchdog (github, packages.python.org). Которая помимо интересных мне ОС поддерживает также MacOS (есть своя специфика) и Windows.
Тем, кому данный вопрос интересен и кого не отпугнет индийское происхождение автора, прошу
под кат
Total votes 39: ↑38 and ↓1 +37
Views 32K
Comments 34

Прототип клиента Яндекс.Диска для Linux и открытие API

IT-companies
На днях Яндекс открыл документацию API Яндекс.Диска, и я хочу рассказать о примере программы, созданной на базе этого API.

У Яндекс.Диска есть отдельные клиентские программы для ОС Windows и Mac OS X, которые поддерживают локальную копию файлового хранилища. Это невероятно удобно! Надо отдать должное Дропбоксу, который, кажется, первым предложил именно такой способ использования облачного файлового хранилища.

Для Линукса клиента нет, но зато Яндекс.Диск поддерживает доступ к файлам по открытому и отлично себя зарекомендовавшему за многие годы протоколу WebDAV. Поддержка WebDAV в ядре Линукса позволила относительно малой кровью создать прототип синхронизирующего клиента Яндекс.Диска.

Текущая версия доступна на гитхабе — это примерно 130 строк кода на Перле, а здесь я очень кратко расскажу, как она устроена и работает.

Краткий дисклеймер: поскольку пока это в большей степени прототип, использовать программу для синхронизации важных данных не рекомендуется. Клиент имеет пока лишь рудиментарую обработку ошибок, а также расходует куда больше памяти, процессора и трафика, чем можно.

Читать дальше →
Total votes 63: ↑60 and ↓3 +57
Views 9.1K
Comments 22

Слежение за изменениями в директории: как это делается в разных ОС

Configuring Linux *
Я бы хотел посвятить статью обзору API, предоставляемых разными ОС для слежения за изменениями в директории. Статья появилась как результат моей работы над демонами слежения за изменениями для утилиты dklab_realsync (статья на хабре, github репозиторий) и своей собственной, которую я пока что не хочу анонсировать.
Читать дальше →
Total votes 93: ↑88 and ↓5 +83
Views 68K
Comments 76

Эволюция сборки логов «облака» и сборщик логов в open source

Badoo corporate blog Website development *PHP *Go *
Здравствуйте, меня зовут Юрий Насретдинов, я работаю старшим инженером в Badoo. За последние полтора года я сделал несколько докладов на тему того, как работает наше облако. Слайды и видео можно посмотреть тут и тут.

Сегодня настало время рассказать о ещё одной части этой системы — о сборщике логов, который мы вместе с этой статьей выкладываем в open-source. Основная часть логики нашего облака написана на языке Go, и эта подсистема не является исключением.
Исходные коды системы: github.com/badoo/thunder
В этой статье я расскажу вам о том, каким образом мы доставляем логи приложений в нашем облаке, которое мы называем просто «скриптовым фреймворком».

Логи приложений


Наши приложения, запускаемые в облаке, представляют из себя классы на PHP, которые в простейшей реализации имеют метод run() и получают на вход данные задания, например, число от 1 до N, где N — максимальное число экземпляров для этого класса. У каждого задания есть свой уникальный id, и конечной целью является доставка логов в какое-то централизованное хранилище, где можно будет легко найти логи как конкретного запуска, так и все логи класса сразу.
Читать дальше →
Total votes 34: ↑29 and ↓5 +24
Views 14K
Comments 13

Централизованное обновление сертификатов Let's Encrypt

System administration *Nginx **nix *DevOps *
Sandbox

letsencrupt server


Всем привет!


В этой статье я опишу как мы решали проблему централизованного обновления сертификатов Let's Encrypt и управления инфраструктурой с помощью ansible.


В нашем решении мы будем использовать:


  • ansible
  • rsync, rsyncd
  • inotify, incron
  • certbot
  • nginx
Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Views 14K
Comments 16

Простой rpm репозиторий используя Inotify и webdav

System administration *IT Infrastructure **nix *Data storage *DevOps *

В этом посте рассмотрим хранилище rpm артефактов c помощью простого скрипта с inotify + createrepo. Заливка артефактов осуществляется через webdav используя apache httpd. Почему apache httpd будет написано ближе к концу поста.


Итак, решение должно отвечать cледующим требованиям для организации только RPM хранилища:


  • Бесплатное


  • Доступность пакета в репозитории через несколько секунд после загрузки в хранилище артефактов.


  • Простое в установке и обслуживании


  • Возможность сделать высокую доступность (high availability)

Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 2K
Comments 10

Перехват и обработка событий в файловой системе Linux

Cross Technologies corporate blog *nix *C *Development for Linux *

В предыдущей статье мы рассмотрели сборку и установку пакета на Linux системах, в которой упомянули про Linux Kernel Module (LKM) и обещали раскрыть позднее подробности о пути к нему и его создании. Ну что ж, настало его время. LKM – мы выбираем тебя.

Читать далее
Total votes 12: ↑12 and ↓0 +12
Views 4.6K
Comments 8