使用 docker 搭建 nextcloud 对于后台任务使用 cron 的处理方案

发布于 2024-06-23  44 次阅读


标题比较长,应该也只有以 docker 方式搭建中才会遇到这个问题。

docker 搭建时,在 管理设置 -> 基本设置 中,对于后台任务的默认方式是 AJAX,改成官方推荐的 cron 方式之后,就会出现无法运行 cron 的状况,表现形式为提示 “上次任务执行于 xxx minutes ago。”(超出 5 分钟)。

解决方案 1:

宿主机 中添加 crontab 任务(crontab -e),每隔 5 分钟执行 docker 对应的 nextcloud 容器内的 cron:

*/5 * * * * docker exec -u www-data nextcloud php /var/www/html/cron.php
注意:上面语句中的 nextcloud 为你 docker 容器的名字,可能不同!

解决方案 2:

在 docker compose 文件中添加一个 cron 容器(示例):

version: '3'

services:
  db:
    image: mariadb:10.6
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql:Z
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env

  redis:
    image: redis:alpine
    restart: always

  app:
    image: nextcloud:apache
    restart: always
    ports:
      - 127.0.0.1:8080:80
    volumes:
      - nextcloud:/var/www/html:z
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  cron:
    image: nextcloud:apache
    restart: always
    volumes:
      - nextcloud:/var/www/html:z
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis

volumes:
  db:
  nextcloud:

感谢

https://help.nextcloud.com/t/nextcloud-docker-container-best-way-to-run-cron-job/157734/3

https://github.com/nextcloud/docker/issues/1695