2016-07-31 8 views
-1

私は、私が継続的に実行したいPHPスクリプトを開発しました。永遠のcronジョブ

たとえば、スクリプトrun.phpはタスクのリストを実行しますが、どれくらい時間がかかるかはわかりません:30秒、1分、2分以上かかることがあります。

このスクリプトは同時に実行できないという問題があります。

cronジョブを使用することはできません。毎分cronジョブをセットアップしても、スクリプトは1分以上実行されているため、バグが発生するためです)。

は実際に、私はこのcronジョブを永久に実行されることを望む:毎回run.php終了し、スクリプトrun.phpは...何度も何度も、再ロードされ

私はこの問題を解決する方法がわかりません。

お願いします。

ありがとうございます。

+0

[linuxの中で継続的にバックグラウンドジョブを実行する]の可能複製(http://stackoverflow.com/questions/18896893/running-background-job-continuously-in-linux)私はこのISNと信じて – pdexter

+0

@pdexterその質問の複製。 OPは、 'run.sh'の同時実行は起こらないと明言しています。あなたが参照した質問に対する答えは、そのケースを説明していません。 – pah

+0

こんにちは、はい、それは重複していません。面白い、あなたは本当に私の質問を読むより重複した質問を見つけるために多くの時間を失った;) – user3392106

答えて

1

あなたました[少なくとも2つのオプション:

  • コードrun.phpの下で、それはすでにとセットアップ(一部の外部制御スクリプトの先頭にチェックされているシステムを設定することによって)実行されている場合、決定あなたが説明したcrontabの仕事。 [私はこのアプローチをお勧めします]。

  • (while :; do php run.php; done) &のようなものを一度実行し、/etc/rc.localの中に入れて、すべてのシステム起動時に実行させます。私はこのアプローチが本当に好きではありませんが、それは可能な解決策です。

+0

こんにちは、あなたの答えをありがとう。まず最初に、外部の制御システムを設定することはどういう意味ですか?ファイル/データベースの値と同じです。私はそれを作ることを考えていたが、私が恐れているのは、私が値を設定した場合:on(スクリプトが実行中)でoff(スクリプトが実行されていない)の場合、ファイルrun.php。しかし、run.phpがファイルの最後に行くことができない場合(何らかの理由で)、値をoffに更新することはできず、スクリプトは実行されません。私はそれが明確であることを望む – user3392106

+0

@ user3392106はい、問題が生じる可能性があります。完璧なソリューションは、状態が常に更新されることを許可します。これを許可できない場合、ウォッチドッグシステムを実装することができます。たとえば、状態が 'n'分更新されなかった場合、スクリプトは状態の更新に失敗し、もはや実行されていないとみなします。これは完璧ではないし、スクリプトの実行にどれくらいの時間がかかるかわからない場合はバグを引き起こす傾向がありますが、もう一つのアプローチです。 – pah

+0

ok、ありがとう、私はそうするでしょう。ここにアイデア。私は一時的な値を持つtxtファイルを作成します。私のスクリプトrun.phpで、txtファイルの値をテストし始めます。空の場合(またはタイムスタンプ<7分の場合)、実際のP​​HPスクリプトの前にタイムスタンプを挿入します。 run.phpのスクリプトの最後に、ファイルが最後に実行されることを意味するので、私はタイムスタンプを消去します(ファイルは再び空です)。問題がある場合、ファイルにはタイムスタンプが付きます。次のrun.phpを実行すると、このタイムスタンプはエラーがあったかどうかを知るのに役立ちます – user3392106