Magento2でメルマガが飛ばない まとめ
Magento2でメルマガをテスト配信しようとしたところ、なぜかSending状態で止まった状態になった。
cronの設定もして定期的に流せる状態になっているはずなのだが・・・。
厳密に言えばテストでメルマガを打ってみたやつで、Send状態になって飛んでいるメルマガもあるんだ。
まぁcronでの配信じゃなくてマニュアル配信で流したやつですが。
Linux側で設定したcronは定期処理が走っているのは確認している。
・・・正常に処理が実行されているかどうかはともかくね。
なので、ひとまずこっちは置いておいて、マニュアル配信をやってみた。
とりあえずマニュアル配信用にデータを作成。
普通に、Magento2をインストールしたディレクトリからコマンド実行。
php bin/magento cron:run
管理画面を見てみる。
このメルマガに関しては一発でコマンド実行はうまくいった。
そして立て続けにテストしたメルマガ。この状態からコマンドを実行。
よっしゃ!これで飛ぶはずや!!
・・・だが、変化なし。
なんでや!?
とりあえず、コマンドを実行すれば、メルマガは飛ぶはずである。
コマンド実行でメルマガがSend状態になって配信されるのは既に確認している。
なぜ飛ばないか悩んだ。
・・・とりあえず困ったらMagentoキャッシュをクリアしてみようということで、キャッシュ画面へ。
キャッシュをクリアしても、状態は先の画像のままで、好転なし。
この不安定さに、またも悩んだが、まずはどのタイミングでメルマガが飛ぶかを探っていこうとした。
何回かコマンドを実行した後、時間を置いてからキャッシュをクリアして再びコマンドを実行した。
すると・・・。
!?!?!?
タイムラグが5分くらいで飛んでいる!!??
設定したLinuxのcronが影響している・・・とは考えにくい。
というか、怪我の功名か、ここでようやくLinuxのcron側の設定間違いに気づいた。
Linux側のcron設定ファイルのユーザーは・・・実行の特権がない。
つまり、この時点でLinux側でのcronの設定がMagento2側に影響を及ぼしているとは考えにくい。
結果的にこの設定間違いが、何度もマニュアル配信をしまくったことと相まって答えを導いてくれた。
ここでようやく、Magento2のcronはLinux側のcronとは別物であるということがわかった。
そして、どうやら処理が遅延されているところから察するに、Magento2側のcronはキューの概念があるようだ。
うまく行かないといって、躍起になって秒単位で短時間に何度も実行をすると、処理がどんどん遅延されるらしい。
マニュアル配信の落とし穴だった。
ともあれ、キューが綺麗な状態で実行すると即座に流れてくれるみたい。
今度はLinux側のcronの設定を修正する。
今度はちゃんと特権ユーザーより実行するように設定を行なった。
Magento2の公式に書かれている、これ。
*/1 * * * * phpまでのフルパス/php -c phpiniまでのフルパス/php.ini Magento2ディレクトリのフルパス/bin/magento cron:run */1 * * * * phpまでのフルパス/php -c phpiniまでのフルパス/php.ini Magento2ディレクトリのフルパス/update/cron.php */1 * * * * phpまでのフルパス/php -c phpiniまでのフルパス/php.ini Magento2ディレクトリのフルパス/bin/magento setup:cron:run
このコードを特権化しているユーザーで実行設定。
以上でLinuxのcronと、Magento2のcronが釣り合うはずである。
これにより、いちいちマニュアルでMagento2のcronを実行しなくとも行われるはずだ。
そして、いくつかのテスト用のメルマガを作成して流してみた。
発った!メルマガが発った!!うわ~~ん!!!
とりあえず、これで解決はした・・・が。
やはり、メルマガ配信を短時間に複数行うと同じようにMagento2のcron側にキューがたまる。
一応、最終的には配信されるが、あまりに遅延がある場合は一度キャッシュクリアをするといいかもしれない。