- PVSM.RU - https://www.pvsm.ru -

NetBeans: синхронизация файлов с удалённого сервера через ssh

Доброго времени суток читатель!

Любой, кто работает в этой замечательной IDE, рано или поздно, задаётся вопросом: «Почему там нет простой, казалось бы, вещи — автоматической синхронизации файлов с удалённого сервера!?».

В параметрах проекта и в настройках NetBeans есть галочка «Включить автоматическое сканирование исходных файлов», которая должна бы решить данную проблему, но положительного эффекта от неё замечено не было.

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

Способ, который родился, больше похож на костыль, чем на хорошее решение проблемы, впрочем, свою задачу он делает, как и любой другой костыль. Первое, что пришло на ум это rsync + bat + планировщик, но это чёрное окошко, появляющееся каждые несколько минут, не доставляло радости, стал искать альтернативные способы и вот что получилось:

Нам понадобиться

для windows:

  • cygwin [1] с установленными утилитами ssh, rsync
  • nnCron [2]

для linux
в зависимости от оболочки операционной системы ставим:

  • ssh
  • rsync
  • cron
Общее для Winsows и linux

Создаем в папке проекта файл sync.list (называться он может как угодно, главное не забыть указать соответствующее имя в параметре --files-from)

Файл содержит список синхронизируемых директорий. Особое внимание нужно обратить на то, что директории внутри должны быть относительными, т. е. если проект на сервере лежит в папке /sites/site1, а мы хотим синхронизировать папки /sites/site1/public и /sites/site1/app, то в файле нужно написать просто

public
app

Каждая директория с новой строки. Все пути будут проложены относительно того, который указан в параметрах rsync, такое поведение можно изменить с помощью флагов команды.

О параметрах настройки crontab можно почитать, например, здесь [3], о параметрах rsync — здесь [4]

Windows

  • скачиваем и ставим nnCron
  • в папке программы находим файл nncron.tab и открываем его любым текстовым редактором
  • в конец файла дописываем следующее задание:
    #( sync
    Time: */10  * * * * *
    Action:
        <JScript>
            var WshShell = WScript.CreateObject("WScript.Shell");
            WshShell.Run("pathToCygwin\cygwin\bin\rsync.exe -uptrzc -e 'ssh -i /cygdrive/pathToKey/ssh_key' --files-from=/cygdrive/d/NetBeansProjects/project/sync.list login@server:/pathToProjectOnServer /cygdrive/d/NetBeansProjects/project/");
             WScript.Sleep(60000);
            WshShell.SendKeys("exit{ENTER}");
        </JScript>    
    )#

Linux

  • Открываем /etc/crontab любым текстовым редактором (для этого понадобиться sudo или root)
  • добавляем задание
    
     */10  * * * * *  user rsync.exe -uptrzc -e 'ssh -i /pathToKey/ssh_key' --files-from=/NetBeansProjects/project/sync.list login@server:/pathToProjectOnServer /NetBeansProjects/project/
    

Вот собственно и всё. Если ваш проект использует не ssh а ftp или другой протокол, можно использовать соответствующие программы для этого.

Благодарю за внимание!
Пожелания и предложения приветствуются!

Автор: Slavenin999

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/56329

Ссылки в тексте:

[1] cygwin: http://www.cygwin.com

[2] nnCron: http://www.nncron.ru/index_ru

[3] здесь: http://www.rhd.ru/docs/manuals/enterprise/RHEL-AS-2.1-Manual/custom-guide/cron-task.html

[4] здесь: http://www.opennet.ru/man.shtml?topic=rsync&category=1&russian=2

[5] Источник: http://habrahabr.ru/post/214599/