0

私はPHPを使用しており、次のような.batファイルを実行するためにいくつかのWindowsスケジュールタスクを設定しました

"C:\PHP\php.exe" "C:\inetpub\wwwroot\cron\run-me.php"

それらの中で。これらはすべてうまく機能し、30分ごとに実行するようにタスクを設定しました。'run-me.php'ファイルには、レコードの終了日をチェックし、終了日が現在よりも短い場合にレコードを期限切れにするスクリプトが含まれています(スクリプトには、電子メールの送信など、より多くの機能があります)。繰り返しますが、それらはすべてうまく機能します。

スクリプトは30分ごとにしか実行されないため、サイトに訪問者がいるときにもスクリプトを実行したいので、基本的に各ページの読み込みで、終了アイテムを確認し、期限切れにし、読み込みを続けてすべてのレコードを最新の状態に保ちます。私がWindowsタスクで実行する理由は、何時間も訪問者がいない可能性があるため、レコードを期限切れにして電子メールを送信する必要があるためです。

今、私が抱えている問題は、Windowsタスクが実行されていて、訪問者がページをリロードすると、同じ内容の二重の電子メールを頻繁に受信するため、二重のスクリプトが実行されることです。

私のWindowsタスクでは、単一のインスタンスのみを実行でき、5分以上実行すると強制的に停止されます。

私の質問は次のとおりです。

  1. PHPスクリプトからWindowsスケジュールタスクを実行して、同じスクリプトの1つのインスタンスのみが実行されるようにすることはできますか?
  2. DBにMySQLを使用していますが、他にアクションを実行できないように行をロックして、レコードへの最初のアクセスを実行するスクリプトを許可する必要がありますか?
4

1 に答える 1

0

トランザクションを使用することでうまくいくはずです。ただし、これはcron(またはWindowsのスケジューラー)でのみ実行することをお勧めします。これは、5分ごとに実行されることを意味します。

于 2013-03-06T21:51:20.407 に答える