Как запускать cron-задачи в WordPress на Docker

Вопрос или проблема

Я запускаю сайт на WordPress в контейнере Docker. Сайт работает, но cron-задачи не выполняются, поэтому я скачал crontrol, чтобы получить графический интерфейс для crontab и подтвердить, что задачи существуют. Когда я загружаю страницу, сверху списка задач я вижу это:
вставьте описание изображения здесь

ошибку, которая говорит о том, что мой сайт не может выполнять cron-задачи. Как мне запустить мои задачи?

(кстати, я могу выполнять команды curl из своего контейнера)

docker-compose.yml:

version: '2'

services:
   db:
     platform: linux/x86_64
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     ports:
       - "3309:3306"
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: forumator

   redis:
     image: redis:5.0.4
     hostname: redis
     restart: always
     ports:
      - 6379:6379
     volumes:
      - redis-data:/data

   wordpress:
     depends_on:
       - db
       - redis
     links:
       - redis
     build:
       context: ./
       dockerfile: ./.docker/Dockerfile
     working_dir: /var/www/html
     volumes:
       - ./:/var/www/html/wp-content
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_NAME: forumator
       WORDPRESS_DB_USER: root
       WORDPRESS_DB_PASSWORD: passw
       ENV: local
       WORDPRESS_DEBUG: 0
       WORDPRESS_CONFIG_EXTRA: |
        define( 'SBDAPI_AUTH', '[email protected]:secret?' );
        $$redis_server = [
          'host' => 'redis',
          'port' => 6379,
          'auth' => '',
          'database' => 0
        ];

volumes:
    db_data:
    redis-data:

Dockerfile:

FROM wordpress:6.1.1-php7.4

RUN yes '' | pecl install redis
RUN docker-php-ext-enable redis

Возможно, есть задача, которая занимает слишком много времени, возможно, это обновление плагина, который не может достигнуть своего сайта обновлений. В логах должны быть некоторые подсказки. Точка доступа WP: http://yourdomain.com/wp-cron.php.

Ответ или решение

Для запуска cron-заданий в WordPress на Docker-контейнере вам нужно выполнить несколько шагов, чтобы убедиться, что задачи WP Cron работают должным образом. Давайте разберем это по пунктам.

1. Понимание WP Cron

WordPress использует WP Cron для управления запланированными задачами (cron jobs). Однако WP Cron работает не так, как традиционные cron. Вместо этого он триггерится при доступе к вашему сайту. Если ваш сайт имеет низкий трафик, WP Cron может не срабатывать, если никто не посещает его.

2. Проблема с запуском WP Cron в Docker

Если вы получили сообщение об ошибке, сообщающей о том, что cron-задания не работают, это может произойти по нескольким причинам:

  • WP Cron не инициализируется из-за низкого трафика или конфликта с хостингом.
  • Проблема сети или конфигурации в Docker.

3. Решения

3.1. Запуск WP Cron через внешний запрос

Одним из способов заставить WP Cron работать — это использовать cron на вашем локальном сервере или на любом хостинге для регулярного обращения к wp-cron.php. Например, вы можете настроить следующий cron-запуск:

* * * * * curl http://yourdomain.com/wp-cron.php > /dev/null 2>&1

Это будет вызывать WP Cron каждую минуту, что позволит запускать запланированные задачи.

3.2. Отключение самого WP Cron в WordPress

Если у вас есть демоны cron на сервере (или вы настраиваете их с помощью cron на хостинге), рекомендуется отключить WP Cron в файле wp-config.php, добавив следующую строку:

define('DISABLE_WP_CRON', true);

Затем, как описано выше, настройте внешний cron job.

3.3. Проверка логов на наличие ошибок

Также проверьте логи вашего веб-сервера, чтобы увидеть, есть ли какие-либо ошибки, связанные с обращением к wp-cron.php. Это может дать дополнительные подсказки о том, что может быть не так.

3.4. Проверка настроек Docker

Убедитесь, что контейнер wordpress может отправлять HTTP-запросы. Иногда, если вы находитесь в локальной сети или используете специфические настройки сети в Docker, это может помешать вашему сайту правильно обращаться к wp-cron.php.

4. Пример исправленного docker-compose.yml

Если необходимо внести дополнительные изменения в конфигурацию, чтобы использование сети Docker не нарушалось, убедитесь, что у вас есть правильная конфигурация сети в вашем docker-compose.yml.

version: '3'

services:
  db:
    ...

  redis:
    ...

  wordpress:
    ...
    networks:
      - wordpress_network

networks:
  wordpress_network:
    driver: bridge

Заключение

Следуя приведенным выше шагам, вы сможете запустить cron-задания в вашем WordPress на Docker. Проверьте вашу конфигурацию, активируйте внешний cron job и мониторьте логи для выявления потенциальных проблем.

Если проблемы продолжаются, постарайтесь установить плагины, которые могут помочь в отладке, такие как WP Crontrol, для получения информации о состоянии запланированных задач.

Оцените материал
Добавить комментарий

Капча загружается...