2017-12-28 17 views
0

PHP CLI *スクリプトを実行して、タスクを実行し、2秒間スリープ状態にしてから、再度実行します。現在、これは次のようになります。PHP CLIスクリプトがフォークせずに自分自身を呼び出すことはできますか?

#!/usr/bin/env php 
<?php 

require __DIR__ . '/config/app.php'; 

$w = new Worker; 

if ($w->running) { 
    exit; 
} elseif ($job = $w->next()) { 
    $w->run($job); 
    sleep(2); 
    exec(__FILE__); 
    exit; 
} else { 
    exit; 
} 

ただし、新しい実行が完了する前に新しい実行が開始されます。私は主にWeb開発者ですので、このレベルに慣れていません(私は幾分高いレベルの抽象度で自宅にいます)が、これはフォークボムと呼ばれるものになると思います。これをどうすれば安全に行うことができますか?

私はpnctl_exec()のPHPマニュアルを読みましたが、正しく理解しているとは確信していません。


*実際の機能のほとんどはまた、Webインターフェイスから呼び出すことができ、ライブラリにあることができるので、それは、PHPのように行われます。

+2

* Wat?*の場合、スクリプト全体を再実行しないでください。*ループを入れてください*。あなたがこれを書いた方法は、何かが死ぬまで、プロセスは永久に蓄積され、決して終わらないでしょう。おそらくあなたのサーバー。 @サミーチェ。 – Sammitch

+0

私はそれほど疑わしい:それは私が尋ねていたものです。 (そして、*ワット*応答も期待していた;私が言ったように、私はここで私の奥行きから外れていることを知っている)確かに、スクリプト内の*ループ*を使うことは、 – TRiG

答えて

1

いくつかの仕事をしている間に、単純にループを作業者の周りに置いて実行することができます。

#!/usr/bin/env php 
<?php 

require __DIR__ . '/config/app.php'; 

$w = new Worker; 

if ($w->running) { 
    exit; 
} 

while ($job = $w->next()) { 
    $w->run($job); 
    sleep(2); // Not sure, if you really need this? 
} 
+0

それはよさそうだ。私はそれを試してみます。 – TRiG

関連する問題