[英]How to run cron jobs inside php-fpm-alpine docker container?
嗨,我不知道如何在此容器內運行 cron 作業。
我發現了這個: How to run a cron job inside a docker container
但這會覆蓋 CMD,我不知道如何保持 php-fpm 正常工作
當您需要在Docker容器中運行多個進程時,一種解決方案是使用超級用戶作為主要指令。 Docker將啟動並監視supervisor ,后者將反過來啟動您的其他進程。
Docker文件示例:
FROM debian:9
...
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/my.conf"]
Supervisord配置示例(/etc/supervisor/my.conf):
[supervisord]
nodaemon=true
[program:cron]
command=/usr/sbin/crond -f -l 8
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
stdout_logfile_maxbytes=0
stderr_logfile_maxbytes=0
autorestart=true
[program:php-fpm]
command=docker-php-entrypoint php-fpm
請注意,最好配置超級用戶以將日志輸出到/ dev / stdout和/ dev / stderr,以允許docker處理這些日志。 否則,隨着文件寫入量的增加,您可能會冒險使容器隨着時間的流逝而變慢。
這里的主要問題是如何使 PHP 與 cron “並行”工作。 除了使用supervisor
之外,另一個答案是使用bash 管理任務的能力。 這里一般都會提到這個。
對於Alpine PHP-FPM
容器和Cron
,啟動腳本如下所示:
Docker 文件:
FROM php:8.1-fpm-alpine
RUN apk --update add --no-cache bash
COPY ./crontasks /var/spool/cron/crontabs/root
COPY entrypoint.bash /usr/sbin
RUN chmod a+x /usr/sbin/entrypoint.bash
ENTRYPOINT /usr/sbin/entrypoint.bash
entrypoint.bash 文件(魔法就在這里)
#!/bin/bash
# turn on bash's job control
set -m
# Start the "main" PHP process and put it in the background
php-fpm &
# Start the helper crond process
crond
# now we bring the primary process back into the foreground
fg %1
請務必記住,Alpine 中的 cron 作業語法與 Debian 不同。 不同的文件夾用於任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.