商品の情報を一回に4000件程取得してくるバッチファイルがある。
→5分に一回実行される設定、だが一回に25分程かかるので二重起動防止機能必要
簡潔にコードを書くとこうなります
class Hoge extends Base(){ //Hogeクラスが呼ばれたら実行される function_construct(){ //初期処理 } public function ichi(){ //実際の実行処理(関数を呼び出しているだけ) } //いくつかpublicの関数が続く・・・ public function ni(){ //エラー出力させる場所 } private function san(){ //ichi関数で呼び出されている関数の中身 } //private関数が続く(public関数で呼び出されている関数の中身が記載されている) }
対策はlockファイルを作ろうとした
①hogeクラスの外でコードを記載
→このファイル呼び出せれていない内から反応している(var_dump("あああ")などとhoge class外に書くと、最初からbrowserに「あああ」と表示)
②consturct内でlockファイル作成、classの一番下に削除機能(コードを下に記載)
→バッチ起動中にlockファイルが見当たらない(権限などの問題で作られないことがあるのか?)
class Hoge extends Base(){ function_construct(){ $lock_file = __DIR__.'/lock.txt'; if( file_exists($lock_file) ){ echo "多重起動はできません。\n"; exit(0); } touch( $lock_file ); //初期処理 } public function ichi(){ //実際の実行処理(関数を呼び出しているだけ) } //いくつかpublicの関数が続く・・・ public function ni(){ //エラー出力させる場所 } private function san(){ //ichi関数で呼び出されている関数の中身 } //private関数が続く(public関数で呼び出されている関数の中身が記載されている) unlink( $lock_file ); }
③DBにカラムを適当に作り起動中は「1」,起動してない時は「0」にして1のときはバッチが起動できないようにする(コード埋め込む部分上のlockファイルと一緒、ロジック自体は一緒なので)
どの方法でやってもバッチがうまく起動せず2秒程で終了してしまいます。 また③のDBの値は変わっているので単純なコード書き換えのミスではないと思われます。
ここで
・そもそもコードを埋め込む場所はあっているのか?
・みなさんならこの場合どのようにして2重起動を防止するのか、全く違う方法でも構いません、様々な方法を知りたいと思っております
よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/04 01:15