2

PHP スクリプト ファイルに関する複数の質問があります。データベースを毎秒更新するこのファイルを作成しています。他にモデリング方法はありません。毎秒実行する必要があります。

現在、CentOSを実行していますが、初めてです。最初の初心者の質問は次のとおりです。

SSH経由でphpファイルを実行するにはどうすればよいですか。# php path-to/myfile.php だけだと読みました。しかし、何かをエコーし​​ようとしましたが、テキストには表示されません。

今、ファイルの開始が問題になるとは思いません。私が推測する1つの問題は、それが可能かどうかさえわかりませんが、ここにあります。

ファイルが 1 回だけ実行されることを 100% 確信できるでしょうか。誤ってファイルを再度実行するとどうなりますか。

さらに、ログへの書き込みを毎秒実装すると、すべてが正常に実行されているかどうかを知ることができます。エラーまたは問題が発生した場合、ログ ファイルは停止します。

fopen、write および close によるログ ファイルへの書き込みです。これって結構時間かかりますよね、CentOSでもっと簡単な方法ないですか?

私が持っているもう1つの大きなポイントは、ファイルを実行するとどうなるかです。ファイルはメモリ内で実行されますか、それともシステム内のファイルを使用しますか。たとえば、スクリプトの実行を停止するために、ファイルに加えられた変更に応答しますか。

ファイル自体に何らかの停止メカニズムを実装できますか。または、ファイルを停止するために使用できるコマンドがあります。

私が知っている別のオプションは、毎分実行される cronjob を実装することです。そして、この cronjob は php ファイルを実行します。php ファイルは 1 分間ループし、必要なものをすべて更新して終了します。このメソッドを実装しましたが、ブラウザを使用しただけです。muファイルを参照して開きました。ブラウザが 1 分間ビジーであることがわかりましたが、データベース内の何も更新されませんでした。これの理由が何であるかを知っている人はいますか。

もう 1 つの質問は、cronjob メソッドを実装することです。PLESK パネルに入力するコマンドは何ですか。上記のコマンドと同じですか。php とファイル名だけです。または、-f -q -something のような特別なコマンドがあります。

初心者の質問で申し訳ありません。

誰かが私を助けることができれば、本当に感謝しています。

チャオ!

4

2 に答える 2

8

スクリプトのコピーが 1 つだけ実行されるようにする最も簡単な方法は、 を使用flock()してファイル ロックを取得することです。例えば:

<?php

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) { // do an exclusive lock
    ftruncate($fp, 0); // truncate file
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);

?>

したがって、基本的には、スクリプトが開始時にロックを取得しようとする場所にダミー ファイルを設定します。成功すると、実行されます。そうでない場合は終了します。そうすれば、一度に実行できるスクリプトのコピーは 1 つだけです。

注:は アドバイザリflock()ロック方式と呼ばれるもので、使用した場合にのみ機能します。したがって、これにより、独自のスクリプトが複数回実行されるのを停止しますが、他のスクリプトについては何もしません。これは、あなたの状況では問題ないように思えます。

于 2009-11-23T02:49:52.437 に答える
2

前の回答へのコメントに記載されているように、スクリプト自体内のロックに常に依存できるとは限りません。これは解決策かもしれません。

#Mins  Hours  Days   Months  Day of week
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock; php parse_tweets.php; rm -f /tmp/the.lock
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock; php php get_tweets.php; rm -f /tmp/the.lock

これにより、スクリプトがクラッシュした場合でも、ロックファイルが解放されます。ここから取得: https://unix.stackexchange.com/a/158459

于 2014-11-30T16:06:14.527 に答える