web-dev-qa-db-ja.com

akeebaバックアップは実際にcronジョブでどのように機能しますか

これは、cronジョブから呼び出されたときにAkeebaバックアップシステムがどのように機能するかについての一般的な質問にすぎません。

私はできる限りコードをトレースしましたが、それがフロントエンドから呼び出され、バックエンドからバックアップを開始し、バックアップがどこにあるかをチェックするステップ関数にブラウザーをリダイレクトします。

私の質問は、ステップ関数はそれがどこにあるかをどのようにして知るのですか?ブラウザがリダイレクトされた場合、サーバーはどのようにしてバックアップの処理を続けますか?

これが実際にどのように機能するかに関する情報を見つけようとしてウェブをクロールしましたが、見つけることができません。開催または説明をいただければ幸いです。

ありがとう

リー

5
Lee Wiggins

私はAkeeba Backupの開発者です。 Akeeba Backup Professionalには、2つの異なるCRONスクリプトが用意されています。

推奨される方法は、Webサーバーを完全にバイパスし、バックアッププロセスを本質的にスタンドアロンPHPコマンドラインアプリケーションとして実行するネイティブのCRONスクリプトを使用することです。しかし、それはあなたの質問の対象ではありません。

従来のバックアップ方法は、実際には特別なフロントエンドURLを使用しています。最初にヒットしたURLは、特定のプロファイルを使用してバックアップを開始し、特定のバックアップIDでデータベースに記録します。一部のバックアップ作業が実行されます。この時点で、バックアップエンジンの状態はシリアル化され、一時ストレージにコミットされます。 HTTPリダイレクトが発行されます。新しいURLにアクセスすると、バックアップエンジンの状態が一時ストレージから読み取られ、シリアル化されずにバックアッププロセスが再開されます。このシリアル化/リダイレクト/非シリアル化のダンスは、バックアップが完了するまで続きます。

まず、これはアプリケーションのバックエンドを呼び出しても実際には起こりません。フロントエンド(レガシーリモートバックアップ)とバックエンドバックアップコントローラーの両方が同様の戦略を実装します。唯一の違いは、フロントエンドがHTTPリダイレクトを発行するのに対し、バックエンドはクライアント側のJavaScriptが処理して次のバックアップ手順を実行するかどうかを決定するためのJSONオブジェクトを返すことです。それほど秘密ではないソースは、コンポーネントのバックエンドディレクトリに格納されているバックアップエンジン自体にあります。これは、追跡しようとしていたことだと思います。

次に、最も重要なことは、それが機能する理由を理解することです。シリアル化/非シリアル化のため、内部バックアップエンジンの状態はリダイレクトを通じて保持されます。コツは、バックアップエンジンが、シリアル化と非シリアル化をサポートするFactoryオブジェクトを使用することです。 2009年10月に私のサイトdionysopoulos.meでブログを書いています。私のサイトでGoogleで「シリアライズ可能なPHP5ファクトリーパターン」を検索してください。

そのシリアライズ可能なファクトリは、新しいページのロード時にバックアップを再開するたびに、バックアップエンジンがバックアップがどこにあるかを正確に認識する方法です。長期実行プロセスを実装するプロジェクトでこのコードを使用することは歓迎されます。

8
nikosdion