0

Web サービスから XML コンテンツを取得するスクリプトを作成しました。このプロセスは週に 1 回実行する必要がありますが、スクリプト自体はプロセスを完了するために約 180 回再実行する必要があります。スクリプトの各実行には約 3 ~ 8 分かかります。完了するたびに約5秒後に再実行したいと思います。

これに対する私の現在の解決策は次のとおりです。

  • Windows のタスク スケジューラは、週に 1 回、php ページを開きます。
  • スクリプトが実行されて完了すると、JavaScript は完了から 5 秒後にページを再起動します。
  • スクリプトが最後に実行されると、ページのリロードが削除されて停止します。

このソリューションの問題点は、毎週新しいブラウザー ウィンドウを開くことです。ブラウザを手動で閉じることなく、これを行う良い代替方法はありますか?

スクリプトを再実行する理由は、php サーバーの最大制限のスクリプト タイムアウト設定と、実行後にエラーが発生したかどうかのステータスを確認できる可能性があるためです。

前回の実行から 5 秒以内にプロセスを開始するには、非常に多くのポーリングを実行する必要があるため、cron は使用していません。スクリプトの毎週の起動については、スクリプトがJavaScriptを使用して再実行している限り、機能しないと思いますか?

4

1 に答える 1

0

PHP の場合:

<?php

// increase the maximum execution time to 43200 seconds (12 hours)
set_time_limit(43200);

function runTask() {
    static $cycles = 0;

    // do whatever you need to do

    // Increments cycle count then compares against limit
    if ($cycles++ < 180)  {
        sleep(5);  // wait five seconds
        runTask(); // run it again
    }
}

runTask(); // fire up the loop

または、Javascript のファンなら...

node.js の場合:

var cycles = 0;

function runTask() {
  // do whatever you need to do

  // Increments cycle count then compares against limit
  if (cycles++ < 180) {
    setTimeout(runTask, 5000); // run again in 5000 milliseconds
  }
}

runTask(); // fire up the loop

どちらのソリューションも、各反復が完了してから 5 秒後まで関数を再実行しません。

タスク ランナーにいずれかのスクリプトを直接実行させるだけです。ブラウザは必要ありません。

于 2014-11-05T10:17:16.290 に答える