тайм-аут синхронизации php системы s3cmd

Я пытаюсь синхронизировать папки между моим удаленным сервером и amazon s3, используя системную команду через веб-страницу php. На веб-странице есть возможность просмотреть папку, которую необходимо синхронизировать между сервером и s3.

Команда s3 приведена ниже.

system('s3cmd sync '.$fldr_name.' '.BUCKET_NAME.' --config="'.AWS_CONF_FILE.'"',$return);

Для небольших папок это работает. Но я синхронизирую большие файловые веб-страницы, соединение сбрасывается.

Я пробовал это на своем php-скрипте

ignore_user_abort (правда);

Но не повезло. Есть ли способ сделать веб-страницу исполняемой в течение длительного времени?

Спасибо,


person Anish    schedule 27.08.2013    source источник


Ответы (1)


Подход, который вы используете, не идеален. Соединение с сервером может сбрасываться по нескольким причинам, если оно остается открытым в течение длительного времени, и некоторые из них находятся вне вашего контроля.

Я предлагаю вам использовать другой подход к этому:

Поставьте в очередь все эти задачи синхронизации на сервере и выполняйте только пару из них параллельно, используя службу, которая работает в фоновом режиме (например, задание cron или другое).

Когда одна из этих синхронизаций завершается, вы записываете ее успех/неудачу в базе данных.

Затем в пользовательском интерфейсе вы регулярно вызываете вторую службу (через вызовы AJAX, выполняемые через равные промежутки времени), которая проверяет базу данных и возвращает флаг ожидания/успеха/ошибки, который вы сохраняете. Если запрос все еще находится на рассмотрении, вы просто перепроверите позже.

person dcro    schedule 27.08.2013
comment
Спасибо за ответ . У меня уже есть cron-скрипт для синхронизации между моей папкой. Но то, что я создаю, — это требовательный процесс, который означает, что если пользователю нужно немедленно синхронизировать папку, он может использовать эту веб-страницу. Для этой цели я создаю этот. - person Anish; 27.08.2013
comment
Вы все еще можете сделать это по запросу с помощью подхода, который я предложил, если ваша фоновая служба уведомляется, когда что-то добавляется в очередь, или проверяет эту очередь через очень короткие промежутки времени. Если вы используете исходный подход и у вас есть несколько пользователей, которые одновременно запрашивают синхронизацию по запросу, некоторые из этих синхронизаций, вероятно, не будут выполнены из-за проблем с тайм-аутом. Кроме того, при длительных открытых соединениях соединение может быть закрыто из-за проблемы с сетью вашего пользователя, и в этом случае они никогда не увидят, была ли синхронизация успешной или неудачной. - person dcro; 27.08.2013
comment
Ok . Затем я думаю о реализации с пользовательским интерфейсом на основе nohup и ajax. Но единственное, что пользователь не получит предупреждение на экране. Для этого я могу отправить уведомление по электронной почте. - person Anish; 27.08.2013