0

私はエンコーディングサーバーを作っていますが、少し助けが必要です

私はuploadedというディレクトリとvideoConverter.phpというphpファイルを持っており、それが実行されると、アップロードされたディレクトリ内のすべてのビデオファイルを変換し、完成したファイルをストリーミングサーバーにFTPで転送するループがあります。

スクリプトに問題はありませんが、ループが終了すると、ループの終了後にアップロードされた新しいファイルが変換されないという問題があります。アップロードされたディレクトリにファイルがアップロードされたときに、phpファイルまたはスクリプトを実行するために離れて見つける必要があります。

cronジョブを使用して、毎秒phpファイルを実行することを考えていましたが、スクリプトが既に実行されている間、スクリプトを実行し続けませんか?

誰かがこの問題に取り組む良い方法を知っていますか?

4

2 に答える 2

2

私はそのようなタスクに PHP を使い続けるつもりはありません。PHP はエンコーディング ツールとファイル自体の間の非効率的なレイヤーになるだけです。スクリプト言語ではなく、イベント駆動型のツールが必要です。

アップロード フォルダー内のローカルの変更をinotifyで確認してから、外出先で新しいファイルを処理することをお勧めします。

私の最初の取り組みは、Node.js環境でinotify ラッパーを使用することです。

  • 新しいファイルが表示されるたびにencode(newFile)呼び出されます。
  • エンコード処理が終了すると、pushToFTP(encodedFile)コールバックが起動され、転送が開始されます。

おまけに、小さなファイルは、非同期の js アーキテクチャにより、ジョブ全体が完了するまで待つ必要はありません。

于 2012-08-23T02:20:22.057 に答える
0

あなたがすることができます:

  1. スクリプトは cron から起動し、「pid」ファイルをチェックします。
  2. pid ファイルが見つかった場合は、シャットダウンします。
  3. pid ファイルが見つからない場合は、その pid を現在のディレクトリに書き込みます。
  4. 次に、ビデオ ファイルの処理を開始します。
  5. 完了時、または終了しなければならないエラーが発生した場合、pid ファイルを削除/リンク解除します。

現在、プロセスが失敗し、失敗のリンクが解除されない場合、これにより問題が発生する可能性があり、他のジョブは実行されません。

他にできることは、ブートストラップ スクリプトを実行させることです。 exec('ps aux | grep VIDEO_SCRIPTNAME'); (または何か)、スクリプトが既に実行されている場合は、ビデオ変換スクリプトを実行しないでください。その例では、cron によって実行され、ビデオ変換が現在行われているかどうかを確認するブートストラップと、実際に作業を行う 2 番目のファイルの 2 つのファイルがあります。

于 2012-08-23T02:08:55.053 に答える