Наблюдайте за изменениями файловой системы и rsync кроссплатформенным способом с минимальными зависимостями

Я хотел бы запустить долго работающий скрипт на Ruby или Python и заставить скрипт наблюдать за локальным каталогом на предмет изменений файлов и новых файлов. Периодически скрипт запускает одностороннюю rsync для удаленного сетевого расположения.

Это должно работать как в среде Linux (Ubuntu 13.10+), так и Windows (Windows 7+). Важно отметить, что я хотел бы свести к минимуму количество необходимых зависимостей, и я хотел бы установить одно и то же в каждой системе, просто отбрасывая некоторые файлы в каталог - без установщика.

Можно ли получить желаемую систему без установщика? Если так, то как?

4 ответа

В прошлом, когда я делал это с платформы Windows на любую другую систему, которая поддерживает sshd или sftp, я использовал WinSCP, который имеет очень хорошо написанные функции синхронизации. WinSCP также может быть запущен из командной строки для просмотра локального каталога и автоматического отправки и / или извлечения файлов в удаленную файловую систему по протоколам SCP или SFTP.

Решение WinSCP очень надежное и легко настраиваемое, но оно написано для Windows.

Я получил WinSCP для установки на мою Linux-машину, используя 32-битную версию Wine, и она работает достаточно хорошо, хотя я еще не пробовал запускать функцию синхронизации из CLI на linux. Я уверен, что в ближайшее время CLI будет работать над Linux, когда у меня будет время сосредоточиться на этом.

Я слышал хорошие новости о https://pypi.python.org/pypi/watchdog - библиотеке Python для мониторинга событий файловой системы, которая работает в Linux, OSX, FreeBSD и Windows.

Я бы использовал что-то вроде bbfreeze или pyinstaller, чтобы упаковать весь ваш инструмент в двоичные файлы для различных платформ. У rsync уже есть установщики для большинства систем.

В качестве возможного решения первой части вашего вопроса вы должны взглянуть на inotify-tools, он содержит инструмент inotifywait, который просматривает каталог (или набор каталогов рекурсивно) и выводит уведомления об изменениях (они могут быть ограничены определенным типы событий, например, создание, удаление, изменение файла и т. д.). Более подробную информацию можно найти на странице руководства.

Я не знаком с программированием (python или иным способом) на машинах Windows, но для Windows существует порт inotifywait в форме inotify-win, который после создания исполняемого файла можно запускать из скрипта через подпроцесс. с минимальными изменениями платформы для версии Linux.

Что касается второй части вашего вопроса, вы можете перейти на SFTP с использованием paramiko, однако, похоже, что зависимость от PyCrypto может сделать этот вариант немного сложным с точки зрения Windows.

Я понимаю, что это не полный ответ на все части вашего вопроса, но, надеюсь, здесь есть что-то, что вы найдете полезным.

Если вы хотите создать собственный скрипт на Python, я бы рассмотрел возможность использования AsyncSSH. Асинхронный характер поможет создать очень быстрый инструмент, обладающий всеми функциями, необходимыми для безопасного доступа к удаленной системе.

Единственное ограничение заключается в том, что удаленной системе нужен демон SSH, но в наши дни это становится намного проще, и я слышал, что в новейших версиях Windows даже есть готовый демон SSH.

В настоящее время я раздумываю над тем, стоит ли создавать такой инструмент самому.

Другие вопросы по тегам