Если то, кто бы ни управляет sudoers файлом, изменит его так, чтобы можно было выполнить определенные команды без пароля, это будет столь же просто как выполнение:
$ ssh other-host sudo /path/to/deployment.script
В противном случае затем у Вас может быть sudo, берут его вход из файла:
$ ssh other-host 'sudo -S /path/to/deployment.script < password.file'
Но, не делайте этого, поскольку это означает помещение пароля в файл. И администратор сервера должен ударить Вашу задницу для этого.
Более оптимальному варианту, чем все вышеупомянутое состоял в том, чтобы настроить администратора сервера запись в authorized_keys файле корня, которому только позволяют запустить скрипт развертывания. Таким образом, для запущения скрипта Вам только нужно к ssh в сервер как корень со специальным ключом.
Если можно доверять файловой системе измененные в последний раз метки времени, можно убыстриться, вещи путем объединения Rsync с UNIX/Linux 'находят' утилиту. 'находка' может собрать список всех файлов, которые показывают измененные в последний раз времена в течение прошедшего дня и затем передают по каналу ТОЛЬКО, который сократил список файлов/каталогов к Rsync. Это намного быстрее, чем наличие Rsync сравнивает метаданные каждого файла на отправителе против удаленного сервера.
Короче говоря, следующая команда выполнит Rsync ТОЛЬКО в списке файлов и каталогах, которые изменились за прошлые 24 часа: (Rsync НЕ потрудится проверять любые другие файлы/каталоги.)
find /local/data/path/ -mindepth 1 -ctime -0 -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
В случае, если Вы не знакомы с командой 'находки', она рекурсивно вызывает через определенное поддерево каталога, ища файлы и/или каталоги, которые соответствуют любым критериям, которые Вы указываете. Например, эта команда:
find . -name '\.svn' -type d -ctime -0 -print
запустится в текущем каталоге (". "), и рекурсивно вызывают через все подкаталоги, ища:
Это печатает имя полного пути (" - печать") чего-либо соответствующего тем критериям на стандартном выводе. '-Имя опций', '-тип' и '-ctime 'называют "тестами" и '-печатью опции', называют "действием". Страница справочника для 'находки' имеет полный список тестов и действий.
Если Вы хотите быть действительно умными, можно использовать тест ''-cnewer команды 'находки' вместо '-ctime, 'для создания этого процесса более отказоустойчивым и гибким. '-cnewer' тестирует, изменили ли каждому файлу/каталогу в дереве его метаданные позже, чем некоторый ссылочный файл. Используйте 'касание' для создания ссылочного файла Следующего запуска в начале каждого выполнения, прямо прежде чем 'найдут... | rsync...' команда, выполняется. Вот базовое внедрение:
#!/bin/sh
curr_ref_file=`ls /var/run/last_rsync_run.*`
next_ref_file="/var/run/last_rsync_run.$RANDOM"
touch $next_ref_file
find /local/data/path/ -mindepth 1 -cnewer $curr_ref_file -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
rm -f $curr_ref_file
Этот сценарий автоматически знает, когда он был в последний раз выполнен, и он только передает файлы, измененные начиная с последнего выполнения. В то время как это более сложно, это защищает Вас от ситуаций, где Вы, возможно, избежали выполнять задание больше 24 часов, из-за времени простоя или некоторой другой ошибки.
Попробуйте унисон, это было специально предназначено для решения этой проблемы путем оставления сдачу списки (создающий список файлов), локально к каждому серверу, ускорив время для вычисления дельты и уменьшать суммы, которая отправляется через провод впоследствии.
http://oss.linbit.com/csync2/ разработан для этого вида вещи, я дал бы этому попытку.
Если Вы используете-z, включают rsync, пытаются работать без него. По некоторым причинам я видел, что это ускоряет даже начальное перечисление файлов.
Удаление -z из команды rsync, которая не является сжатием, привело к тому, что "список принимаемых файлов" стал работать намного быстрее, и нам пришлось передать около 500 ГБ. Раньше с ключом -z требовался день.
touch $next_ref_file
в конце? Это действительно оставляет нас без способности справиться с удаленными путями, хотя (даже эти статические архивные отчеты в конечном счете становятся достаточно взрослыми, что они заархивированы и удалены). Это не могло бы быть выставочным стопором все же. – MightyE 24 February 2010 в 17:15find . -ctime 0
довольно медленно на этой структуре каталогов (все еще ожидающий на нем для завершения для создания отчетов о ее времени). Это на самом деле приводит в уныние меня немного, потому что кажется, что это могло бы быть довольно низкоуровневой операцией, которая, вероятно, устанавливает панель для самого быстрого, которое мы могли ожидать, что это задание завершит. Может иметь место, что диск ввод-вывод является ограничивающим фактором здесь. – MightyE 24 February 2010 в 17:22