При обслуживании статического содержания (или HTML или HTML, сгенерированный чем-то как подвижный тип) затем, ответ, для любых современных аппаратных средств, много. Где много, вероятно, измеряется в десятках миллионов статических запросов в день.
В такой установке первое ограничение, с которым Вы столкнетесь, будет размером Вашего соединения серверов с Вашим дата-центром. Поставщики наиболее выделенного сервера начнут Вас с соединением на 10 Мбит, которое является, вероятно, первой вещью, которая истратит, если Вы приблизитесь к количеству запросов, заключенных в кавычки выше. Обычно они будут переключать Вас на порт на 100 Мбит для минимального изменения, но знать, что это просто означает, что Вы имеете 10x увеличение того, как быстро Ваше ограничение пропускной способности (если у Вас есть один) может быть исчерпано. Обратите пристальное внимание и контролируйте свой ежемесячный журнал useage тесно, чтобы Вы не вносите большую плату за излишек.
Так, после того как у Вас есть соединение на 100 Мбит, следующей потенциальной проблемой будет скорость получения Ваших данных от жесткого диска до сети. Даже на уровне 100 Мбит, который является все еще только 12 МБ в секунду от жесткого диска, который тривиален для современных аппаратных средств. Учитывая достойный объем свободной памяти (для дискового кэша) и хорошее соединение размеров файла (от нескольких сотен байтов для Вашего favicon.ico к нескольким сотням Кбит для большой фотографии) Вы все еще, вероятно, ограничите соединение на 100 Мбит прежде, чем поразить серьезную загрузку.
Однако все это принимает сайт, который служит статическому содержанию, которое почти никогда не верно. При использовании веб-платформы как Django, направляющие, Grails или какая-либо из сотен там затем первым bottlekneck будет ЦП, второй будет память, и третьей будет сумма параллелизма, который может обработать приложение.
У ncftp клиента есть ncftpls инструмент, который может сделать рекурсивный длинный список.
Вот решение для Perl с помощью Сети:: FTP. Ниже сценария должен распечатать имя файла и метку времени для каждого файла в файловом сервере. Можно легко расширить это для удовлетворения фактическим потребностям.
#!/usr/bin/perl use strict; use Net::FTP; use File::Listing qw(parse_dir); use POSIX qw(strftime); # Configuration Options my $FTP_SERVER = 'ftp_host_name'; my $FTP_USER = 'username'; my $FTP_PASS = 'password'; # Establish FTP connection my $ftp = Net::FTP->new( $FTP_SERVER, Debug => 0 ) or die "Cannot connect to $FTP_SERVER: $@"; $ftp->login( $FTP_USER, $FTP_PASS ) or die "Cannot login ", $ftp->message; $ftp->binary; # Get list of files my $files = $ftp->dir; foreach my $entry (parse_dir($files)) { my ($fileName, $type, $size, $mtime, $mode) = @$entry; next unless $type eq 'f'; my $timeStamp = strftime "%Y-%m-%d %H:%M:%S", gmtime($mtime); print "Name: $fileName\t Time Stamp: $timeStamp\n"; } $ftp->quit;
Я - вполне уверенный lftp, может быть задан сценарием, чтобы сделать это; иначе я просто пользовался бы библиотекой FTP для своего любимого языка сценариев (Ruby/Perl/Python) и сделал бы задание тот путь.
Вот сценарий оболочки для помощи Вам на Вашем пути. Если можно выполнить это по ssh, то Вы сделаны. Если необходимо сделать это по FTP, то Вы будете встречаться, мой старый друг Ожидают.Удачи!
#!/usr/bin/env bash
if [ ! -f .baseline ]; then
echo "No timestamp available for comparison. Exiting."
exit 1
fi
for filename in ./*
do
if [ .baseline -ot "$filename" ]; then
echo "$filename"
fi
done
touch .baseline
Используйте wget. Первый день:
wget -r -q --spider --no-remove-listing --ftp-user=YOU --ftp-password=YOURSECRET ftp://YOURSERVER 2>&1
Эта команда произведет локальный каталог под названием YOURSERVER с загруженным деревом каталогов внизу, но каждый каталог будет содержать только один файл, названный ".listing". .listing файлы могут сравниться со старыми копиями с различной командой.
Теперь каждый день:
mv YOURSERVER PREVIOUS_DIR
wget as above
diff -r YOURSERVER PREVIOUS_DIR
Это распечатает все строки, которые отличаются, и крон должен автоматически отправить результат по почте Вам.