ブラウザで動作するWEBシステムで、
使用しているプログラムをcronから呼んだらうまくいかない、
WEBアクセスしたときと結果が違う、
ということはないでしょうか。
cronからPHPをコマンドで実行した場合、
環境変数などの実行環境がWEBとは異なるため
全く同じ動作を行う保証がなく、予測しにくい不具合を生みます。
そこで私は、バッチ処理などでcronからphpを呼ぶ場合は
wgetを使っています。
こんな感じでwgetを呼ぶシェルをcronにセットするだけです。
batch.sh
1 2 3 |
url=https://example.com/test/test1.php?param1=AAA log=/tmp/test1.log wget -q --no-check-certificate ${url} -O ${log} |
これでWEBアクセスと同じ動作を行わせることができます。
重複実行防止処理はphp側で行っています。
もし時間のかかる処理ならwgetのオプションにタイムアウトの指定をします。
1 |
wget --read-timeout=3600 -q --no-check-certificate ${url} -O ${log} |