簡體   English   中英

如何在 php-fpm-alpine docker 容器中運行 cron 作業?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM