2
3

More than 1 year has passed since last update.

FargateでWordpressのcronを実行する

Last updated at Posted at 2021-11-05

はじめに

fargateでWordpressのcronを実行する際の構成をまとめておきます。

wp-cronについて

WordPressのジョブの定期実行(一定時間ごとの処理)の仕組みは、デフォルトではwp-cronと呼ばれる方法を利用しています。これは、Webアクセスをトリガーとし、現在実行すべき処理がないかどうかをその都度確認するものです。

しかし、アクセスがない場合、ジョブの定期実行により呼ばれる"予約投稿"が、時間を過ぎても投稿されません。
また、アクセスの多いサイトであればオーバーヘッドも気になります。

そこで、リアルタイムに処理する必要がある場合には、wp-cronからサーバー側の通常のcronに移行します。

前提条件

  • Fargateの構築 こちらの記事を作成ずみです。

構成

.
├── Dockerfile
├── docker-compose.yml
├── cron.root
├── run.sh
└── html
    └── wp-config.php
FROM wordpress:5.8.1-php7.4-apache

RUN set -ex; \
    apt-get update && apt-get install -y \
        cron \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

COPY html/wp-config.php /var/www/html

#cron実行
COPY cron.root /etc/cron.d/cron
RUN chmod 0644 /etc/cron.d/cron
ADD run.sh /bin/run.sh
CMD ["sh","/bin/run.sh"]

# 所有者の変更
RUN chown -R www-data:www-data /var/www/html

WORKDIR /var/www/html
docker-compose.yml
version: '3'
services:
  wordpress:
    build: . # カレントディレクトリのDockerfileでイメージをビルド
    image: wordpress
    ports:
      - '80:80' # ローカルのport80でコンテナのport80にアクセスできるようにする
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress # MYSQL_DATABASEと一致させる
      WORDPRESS_DB_USER: wp_user # MYSQL_USERと一致させる
      WORDPRESS_DB_PASSWORD: wp_pass # MYSQL_PASSWORDと一致させる
run.sh
/etc/init.d/cron start

tail -f /dev/null

/etc/init.d/cron startでスクリプトが終わると、エラーになります。
tail -f /dev/nullという意味がないコマンドを入れます。

cron
* * * * * root /usr/local/bin/php /var/www/html/wp-cron.php >> /var/log/cron1.log 2>&1

(↑cronは下に空行必須です。)
毎分cronが実行されます。

wp-config.php
# データベース設定の下の辺りに、下記の記述を追加します。
define('DISABLE_WP_CRON', 'true');

確認

Fargate ExecでFargate内にアクセスし、cronが働いているか確認します。
Fargate Execの方法はこちら。

# cat /var/log/cron1.log
// wp-cron.phpのコードが出力されるとok

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3