0

以前は、一連のスクリプトをそれぞれ個別の cron ジョブとして実行していました。ここで、1 つの cron ジョブでコントローラー スクリプトを実行し、スクリプトを個別に (同時に並行して) 呼び出すようにしたいので、追加するたびに新しい cron ジョブを作成する必要はありません。別のスクリプト。

調べましpcntl_fork()たが、インストールされていません。これもできfsockopen()ますか?

いくつかの質問:

  1. を使用するこの例http://phplens.com/phpeverywhere/?q=node/view/254fsockopen()を見ました。これにより、PHP スクリプトを並行して実行できますか? スクリプトは相互作用しないことに注意してください。ただし、いずれかのスクリプトが途中でエラーで終了したかどうかを知りたいです。

  2. 第二に、私が実行しているスクリプトは外部からアクセスできず、内部専用です。スクリプトは以前はphp -f /path/to/my/script1.phpのように実行されていました。Web アクセス可能なパスではありません。#1の例はこれで機能しますか、それともWebアクセス可能なパスのみで機能しますか?.

あなたが提供できるアドバイスをありがとう。

4

2 に答える 2

1

proc_open を使用すると、各プロセスが完了するのを待たずに複数のプロセスを実行できます。プロセスハンドルがあり、いつでも各プロセスを終了でき、各プロセスの標準出力を読み取ることができます。

オプションのパイプを介して通信することもできます。

最初のパラメーターを渡すphp /your/path/to/script.php param1 "param2 x"ことは、別の PHP プロセスを開始することを意味します。

proc_open (例 #1 を参照)

最終的には、無限 while ループ + usleep (またはスリープ) を使用して、CPU の最大使用量を回避する必要があります。すべてのプロセスが終了したとき、またはそれらを強制終了した後に中断します。

編集:プロセスが途中で終了したかどうかを知ることができます。

Edit2: 上記を行う簡単な方法はpopenです

于 2012-05-30T15:32:58.430 に答える
1

私が間違っている場合は修正してください。しかし、私が正しく理解していれば、Tiberiu-Ionut Stan が提案した解決策は、proc_open でプロセスを開始し、プロセスが終了するのを待つことは、cron スクリプトとして実行されるのではなく、cron スクリプトの一部であることを意味します。プログラム/サービスを実行していますよね?

私がcronジョブを理解している限り、user920050が使用を考えていたコントローラースクリプトは、スケジュールに従ってcronによって開始され、新しいインスタンスごとにプロセスが最初からやり直され、プロセスが完了するのを待って、おそらく並行して実行されますコントローラ スクリプトの他の cron 起動インスタンス。

于 2014-11-12T04:43:49.293 に答える