はじめに
Magento2では、cronジョブを実行するためのコマンドとして bin/magento cron:run
が用意されています。
また、bin/magento cron:install
を使用して、cron:runを毎分実行するcronジョブを簡単に設定することができます。
Docker環境で作業している場合、イメージにcrontabの設定が含まれていないと、コンテナを起動するたびに cron:install
を手動で実行する必要があります。(denでも同様です。)
これは手間ですので、crontabファイルをバインドマウントして、コンテナ起動時に自動的にcrontabが生成されるようにする方法があります。
以下に、denで環境構築したMagento2の場合の手順を示します。
設定手順
1.den環境の設定を上書きするために、.warden/warden-env.yml
ファイルを作成します。
# .warden/warden-env.yml
services:
php-fpm:
volumes:
- ./.warden/crontab:/etc/crontabs/www-data
2.crontab
ファイルを作成します。
# .warden/crontab
* * * * * /usr/local/bin/php /var/www/html/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/var/log/magento.cron.log
3.crontab
ファイルの所有者がroot
でないと実行されないため、ホスト側で設定しておきます。
sudo chown root .warden/crontab
上記の手順に従って、den env up
コマンドを使用してコンテナを起動すると、毎分cron:run
が自動的に実行されるようになります。
おわりに
以上がden(warden)+Magento2のcronジョブを設定する方法です。
少しでも手間を減らして、快適な開発環境を目指しましょう!