Электронная программа передач (EPG) — это основа удобного просмотра и планирования времени. Но сами данные часто подвержены недочётам: задержки обновления, пропуски каналов, неполные сетевые источники. Архивирование EPG с историей на 30 дней позволяет увидеть прошлые варианты расписания, быстро восстанавливать пропавшие данные и анализировать, как менялось телепланирование. В этой статье разберём, как настроить автоматическую архивацию EPG на вашем домашнем сервере или медиасервере под управлением Linux и TVHeadend, чтобы хранить 30 дней истории без лишних хлопот.
- Зачем нужен архив EPG и история на 30 дней
- Что нужно для реализации
- Архитектура решения
- Как реализовать автоматическую архивацию
- Способ 1. Встроенная архивация через скрипт на основе TVHeadend
- Способ 2. Архивация через экспорт XMLTV и внешние копии
- Практическая настройка: пример пошагово
- Восстановление и тестирование архива
- Безопасность, хранение и оптимизация
- Расширения и дополнительные идеи
- Таблица примеров имен файлов архивов
- Личный опыт: что сработало лучше всего
- Итог и заключительные мысли
Зачем нужен архив EPG и история на 30 дней
Во-первых, архив позволяет компенсировать случаи задержек или ошибок источников EPG. Если источник обновляется не вовремя, вы можете обратиться к архивной копии и узнать, какой выпуск передачи должен был идти в конкретный день. Во-вторых, 30-дневная история удобна для планирования, когда вы возвращаетесь к ранее просмотренным событиям или хотите проверить, что именно показывали в конкретный период. Наконец, такой архив упрощает анализ контента: вы можете увидеть сезонность, повторения и временные окна лучших программ.
Лично у меня был опыт настройки домашнего сервера на базе Linux с TVHeadend. Я столкнулся с тем, что часть программ уходила в пропуски из-за недостоверных источников EPG. Архивирование позволило мгновенно восстановить корректное расписание за нужные даты и минимизировать простой при настройке записей. Осознанная ретеншия историй также упрощает диагностику, когда возникают расхождения между реальным эфиром и тем, что видит программа-приёмник.
Что нужно для реализации
Прежде чем приступать к настройке, перечислим базовые требования и варианты реализации. В сущности потребуется два элемента: мощная/надёжная база хранения и надёжный механизм сбора EPG. Большинство домашних решений опираются на Linux-совместимые PVR-системы, чаще всего TVHeadend или MythTV. Важно понимать две вещи: куда будет храниться база EPG и как регулярно делать её копии.
Минимальный набор подготовительных условий:
- Linux-сервер или NAS с доступной файловой системой и достаточным объёмом свободного пространства для 30 дней истории. ЕPG не очень большой по объёму, но при большом количестве каналов и длительных сроках можно собрать несколько гигабайт в сжатом виде.
- Настроенная система PVR с поддержкой EPG-источников и доступом к базе данных EPG. В качестве примера удобно использовать TVHeadend, MythTV, VDR или аналогичные решения.
- Правильные пути к базе EPG: SQLite/побочная база или файл, в котором TVHeadend хранит данные. Потребуется разрешение на чтение этой базы и создание копий.
- Скрипт или утилита для экспорта/копирования базы и механизмом автоматического удаления старых копий — cron или systemd-timer.
Уточните путь к вашей EPG-базе в зависимости от дистрибутива и конфигурации. Например, TVHeadend часто хранит данные в каталогах вроде /var/cache/tvheadend или /var/lib/tvheadend, а файлы баз EPG могут называться epg.db. Важно не нарушить права доступа сервера и делать копии с учётом процессов базы данных, чтобы копии были целостными.
Архитектура решения
Предложенная архитектура проста и надёжна: TVHeadend (или другая PVR-система) собирает EPG из источников и формирует локальную базу. Ежедневно выполняется копирование базы EPG в архивный файл с датой и, по желанию, сжатие. Старые архивы автоматически удаляются после достижения периода хранения в 30 дней. Такой подход позволяет сохранить целостность данных и легко восстанавливать состояние на конкретную дату.
Ключевые этапы архитектуры:
- Источник EPG — локальная база TVHeadend или другая база PVR;
- Модуль архивирования — скрипт копирования базы в архив с пометкой даты;
- Хранение архивов — локальная папка с архивами, возможно, на сетевом накопителе;
- Управление сроками хранения — автоматическое удаление архивов старше 30 дней;
- Восстановление — возможность заменить активную базу архивной копией для восстановления расписания на нужную дату.
Такой подход снимает множество бытовых проблем: вы можете быстро откатиться к состоянию расписания на конкретный день, сравнить версии и понять, когда произошли сбои в обновлении. В моей практике после настройки архивирования на 30 дней мы заметно сократили время на диагностику и исправление пропусков в EPG.
Как реализовать автоматическую архивацию
Сама идея состоит в том, чтобы регулярно сохранять копию базы EPG и хранить её в виде архива. Ниже приведены два практических варианта реализации. Выберите тот, который лучше соответствует вашей системе и уровню прав доступа.
Способ 1. Встроенная архивация через скрипт на основе TVHeadend
Этот способ предполагает, что у вас есть доступ к базе EPG TVHeadend и возможность копировать её. Мы создаём простой скрипт, который запускается раз в сутки, сохраняет копию базы EPG и удаляет старые архивы сверх установленного лимита. Ниже современный пример скрипта и инструкция по настройке.
Основной сценарий следующий: копируем базу EPG в файл с датой, затем (по желанию) сжимаем его, и в конце удаляем архивы старше 30 дней. Это минимально безопасно и легко адаптируется под большинство систем.
#!/bin/bash set -euo pipefail # Настройки (измените под свою систему) DB_PATH="/var/lib/tvheadend/epg.db" # путь к активной базе EPG BACKUP_DIR="/var/backups/epg-history" # каталог архива RETENTION_DAYS=30 # сколько хранить архивов DATE=$(date +%Y%m%d) ARCHIVE_NAME="epg-$DATE.db" ARCHIVE_PATH="$BACKUP_DIR/$ARCHIVE_NAME" mkdir -p "$BACKUP_DIR" # Создаем копию базы cp "$DB_PATH" "$ARCHIVE_PATH" # При желании сжимаем копию gzip -f "$ARCHIVE_PATH" # Удаляем архивы старше RETENTION_DAYS find "$BACKUP_DIR" -type f -name "epg-*.db.gz" -mtime +$RETENTION_DAYS -delete
Как запустить: сохраните файл как /usr/local/bin/epg_archive.sh, сделайте его исполняемым (chmod +x /usr/local/bin/epg_archive.sh) и добавьте задачу cron:
0 3 * * * /usr/local/bin/epg_archive.sh
Гарантируемый результат — каждый день в 03:00 в архив добавляется новая копия базы EPG за текущую дату, старые архивы автоматически удаляются, чтобы не перегружать хранилище.
Способ 2. Архивация через экспорт XMLTV и внешние копии
Если ваш стек чаще оперирует XMLTV или вам нужен архив именно в формате XMLTV, можно добавить экспорт EPG в XMLTV и архивировать полученный файл. Это потребует небольшого труда по настройке экспорта в вашем PVR и создание отдельного архивного шага. Преимущество такого подхода — независимость архивов от внутренней структуры базы TVHeadend и возможность переноса архива в другую систему без доступа к самой базе.
Вариант реализации:
- Настроить экспорт EPG в XMLTV через веб-интерфейс PVR или через соответствующие утилиты;
- Сохранить XMLTV-файл в архивную папку с датой (например, epg-YYYYMMDD.xml);
- При желании заархивировать его и держать 30 дней.
Этот подход потребует дополнительных правок и тестирования, но он хорошо сочетается с резервным копированием именно файлов XMLTV, что упрощает перенос или миграцию архивов между серверами.
Практическая настройка: пример пошагово
Рекомендую начать с базовой схемы на TVHeadend и скрипта архивирования. Ниже приведён конкретный рабочий план, который можно адаптировать под ваши условия.
Шаг 1. Установите TVHeadend и базовые источники EPG. Укажите пути к базам и проверьте стабильность обновления расписания. Убедитесь, что у вас есть права чтения базы EPG и запись в каталог архивов.
Шаг 2. Создайте каталог для архивов и тестовую копию. Например, /var/backups/epg-history. Выполните вручную копию и проверьте целостность файлов. Это даст уверенность, что автоматизация не сломает данные.
Шаг 3. Добавьте скрипт архивирования в систему и настройте cron. Установка расписания на ночью снижает влияние на рабочий поток. Важно, чтобы скрипт корректно обрабатывал ситуации, когда база EPG ещё не готова к копированию (например, во время обновления). В моём опыте этот сценарий хорошо обрабатывается проверкой наличия файла и корректной обработкой ошибок.
Шаг 4. Мониторинг и проверка целостности. Раз в неделю смотрите журнал выполнения задачи и сравнивайте размеры архивов. При необходимости добавьте уведомления на почту или в мессенджер, чтобы оперативно реагировать на ошибки копирования.
Шаг 5. Вводите дополнительные проверки. Например, можно проверить, что в архиве присутствуют файлы EPG за текущий день, и что размер архива не равен нулю. Это поможет быстро заметить проблемы источников EPG или ошибок доступа к файлам.
Восстановление и тестирование архива
Архив EPG удобен не только для чтения данных, но и для восстановления. В случае пропусков или сбоя в обновлениях можно заменить активную базу архивной копией за нужную дату. Восстановление зависит от того, как вы храните архив: если это копии базы EPG в формате db.gz, достаточно распаковать архив и заменить текущую базу в TVHeadend.
Пошаговый сценарий восстановления:
- Остановите сервис PVR, чтобы не происходило одновременное обращение к базе.
- Разархивируйте нужный архив: gunzip epg-YYYYMMDD.db.gz
- Переместите распакованную базу на путь активной базы TVHeadend, например, заменив epg.db на файл с тем же именем.
- Запустите TVHeadend и проверьте, что данные обновились и расписание корректно отображается.
Личный опыт: когда нужно было протестировать влияние конкретной даты на расписание, архивы помогали быстро повторно загрузить экземпляр EPG и проверить совместимость новых источников. Это экономило часы рабочей проверки и позволило точнее понять, на каком этапе возникают расхождения.
Безопасность, хранение и оптимизация
Работая с архивами, не забывайте про безопасность и хранение данных. Вот несколько практических советов:
- Разделяйте активную работу сервера и архивы: хранение архивов на отдельном диске или сетевом хранилище снижает риск потери данных при падении основного массива.
- Используйте сжатие. gzip или xz снижают размер архива без потери информации и позволяют экономить место.
- Устанавливайте лимит времени хранения. 30 дней — разумный компромисс между воспроизводимостью и потреблением пространства. При необходимости можно увеличить или уменьшить период хранения, учитывая темпы изменения расписания и доступное место.
- Периодически тестируйте восстановление. Простой тест восстановления на тестовой машине поможет убедиться, что архив действительно пригоден к использованию.
Если у вас есть несколько серий каналов и большой объем данных, подумайте о дублировании архива на резервный сервер или в облако. Это позволит защититься от аппаратных сбоев и временных проблем доступа к локальному накопителю.
Расширения и дополнительные идеи
Сценарий архивации можно расширять в зависимости от потребностей. Ниже несколько идей, которые встречаются в реальных проектах и могут подойти вам:
- Экспорт в XMLTV в отдельной копии, чтобы держать параллельно формат, удобный для внешних инструментов. XMLTV-файлы можно использовать в сторонних планировщиках и сервисах.
- Создание индекса архивов для быстрого поиска по дате и каналу. Это упрощает восстановление именно нужной строки расписания.
- Интеграция архивации в систему мониторинга. Например, отправлять уведомления при появлении ошибок копирования или при превышении порога использования диска.
Таблица примеров имен файлов архивов
| Дата архива | Файл архива | Примечание |
|---|---|---|
| YYYYMMDD | epg-YYYYMMDD.db.gz | Сжатый дамп базы EPG |
| YYYYMMDD | epg-YYYYMMDD.db | Незасжатый дамп (временный) |
Личный опыт: что сработало лучше всего
На практике мне понравился подход с копированием базы EPG и автоматическим удалением старых копий. Он прост в настройке, не требует сложных преобразований и надёжно сохраняет целостность данных. Ключ к успеху — правильные разрешения и регулярная проверка состояния архива. Я также добавлял небольшой скрипт уведомления на электронную почту о результатах выполнения архивации. В моменты тестирования система молнией реагировала на проблемы источников EPG, и мы быстро ограничивали убыток времени на устранение ошибок.
Если вы используете VLAN или сетевое хранилище, можно разместить архив на NAS или другой сетевой папке. Это может снизить риск потери данных в случае падения основного сервера. В моём случае такая настройка позволила круглосуточно сохранять архивы и не перегружать головной сервер.
Итог и заключительные мысли
Автоматическая архивация EPG с историей на 30 дней — разумное вложение в надёжность вашего медиа-центра. Вы получите не только защиту от пропусков и ошибок источников EPG, но и возможность оперативно возвращаться к любому дню расписания для анализа, планирования и восстановления. Реализация не требует сверхсложной инфраструктуры: достаточно двух компонентов — базы EPG и скрипта архивации с надёжной настройкой хранения и удаления устаревших копий.
Лично для меня ключевым оказалось автоматическое оповещение о сбоях архивации и проверка целостности. Это позволило держать систему в рабочем состоянии без постоянной ручной проверки. Экспериментируйте с вариантами хранения и форматами архивации, чтобы подобрать наилучшее сочетание для вашего сервера и объёма каналов. И не забывайте тестировать восстановление на тестовой машине — это часть надёжной стратегии архивирования.







