You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker部署的phplist配置Cron定时任务

方案1:宿主机Cron调度(推荐,无需修改镜像)

这是最简便的实现方式,直接通过宿主机的定时任务调用容器内的phpList队列处理命令即可:

  • 先确认你的phpList容器名称,示例假设容器名为phplist-app,先手动验证命令有效性:
    docker exec -u www-data phplist-app php /var/www/html/admin/index.php -p processqueue -c /var/www/html/config/config.php
    
    注:如果执行报错,先执行docker exec -it phplist-app bash进入容器,确认phpList的安装目录、配置文件路径、运行用户,替换命令中对应参数即可。
  • 验证命令正常返回无报错后,编辑宿主机crontab配置:
    crontab -e
    
  • 新增定时任务规则,示例为每分钟执行一次队列处理,同时输出日志方便排查:
    * * * * * docker exec -u www-data phplist-app php /var/www/html/admin/index.php -p processqueue -c /var/www/html/config/config.php > /var/log/phplist-cron.log 2>&1
    

方案2:容器内置Cron(适合不依赖宿主机调度的场景)

如果希望调度能力和容器绑定,不需要依赖宿主机的Cron服务,可以自定义镜像内置Cron:

  1. 编写Dockerfile基于官方phplist镜像扩展:
    # 替换为你实际使用的phplist基础镜像名
    FROM phplist/phplist:latest
    # 安装cron服务
    RUN apt update && apt install -y cron && rm -rf /var/lib/apt/lists/*
    # 写入phpList定时任务配置,输出日志到容器标准输出方便通过docker logs查看
    RUN echo "* * * * * www-data php /var/www/html/admin/index.php -p processqueue -c /var/www/html/config/config.php > /proc/1/fd/1 2>&1" > /etc/cron.d/phplist
    RUN chmod 0644 /etc/cron.d/phplist
    # 拷贝自定义启动脚本
    COPY entrypoint.sh /entrypoint.sh
    RUN chmod +x /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    
  2. 编写启动脚本entrypoint.sh:
    #!/bin/bash
    # 后台启动cron服务
    cron &
    # 执行原镜像的默认启动逻辑
    exec "$@"
    
  3. 重新构建镜像后启动容器即可。

方案3:Docker Compose 独立Cron容器(符合单进程最佳实践)

如果使用Docker Compose部署,可以新增一个独立的Cron服务,和phpList主服务共享代码、配置卷,使用相同镜像,仅启动命令改为运行cron前台进程,避免单个容器内跑多进程。


注意事项

  • 执行队列命令的用户必须和phpList运行的Web用户保持一致,避免出现文件权限报错
  • 配置完成后务必先手动执行一次处理命令确认无报错,再写入定时规则
  • 队列执行频率可根据你的邮件发送量调整,最低间隔建议不小于1分钟

内容的提问来源于stack exchange,提问作者iappnet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:08