GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit úlohu cron uvnitř kontejneru dockeru

Zde je návod, jak spouštím jeden ze svých kontejnerů cron.

Dockerfile:

FROM alpine:3.3

ADD crontab.txt /crontab.txt
ADD script.sh /script.sh
COPY entry.sh /entry.sh
RUN chmod 755 /script.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt

CMD ["/entry.sh"]

crontab.txt

*/30 * * * * /script.sh >> /var/log/script.log

entry.sh

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8

script.sh

#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"

Sestavte tak

docker build -t mycron .

Běž tak

docker run -d mycron

Přidejte své vlastní skripty a upravte soubor crontab.txt a stačí vytvořit obrázek a spustit. Vzhledem k tomu, že je založen na alpském stylu, je obrázek velmi malý.


crond funguje dobře s tiny na Alpine

RUN apk add --no-cache tini

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/usr/sbin/crond", "-f"]

ale neměl by být spuštěn jako hlavní proces kontejneru (PID 1) kvůli problému se sklízením zombie a problémům se zpracováním signálů. Podrobnosti naleznete v tomto PR Docker a v tomto příspěvku na blogu.


Řešení @ken-cochrane je pravděpodobně nejlepší, nicméně existuje také způsob, jak to udělat, aniž byste museli vytvářet další soubory.

Chcete-li to provést bez dalších souborů:

Způsob, jak jít, je nastavit cron v rámci entrypoint.sh soubor.

Dockerfile


...

# Your Dockerfile above


COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh


echo "* * * * * echo 'I love running my crons'" >> /etc/crontabs/root
crond -l 2 -f > /dev/stdout 2> /dev/stderr &

# You can put the rest of your entrypoint.sh below this line

...


Linux
  1. Jak spustit příkaz uvnitř spuštěného kontejneru Systemd?

  2. Jak spustit program uvnitř kontejneru Docker?

  3. Jak spustit příkaz na spuštěném kontejneru Docker

  1. Jak nastavit úlohu cron, aby každou hodinu spouštěla ​​spustitelný soubor?

  2. Jak nastavit úlohu CRON, aby se spouštěla ​​každých 10 sekund v Linuxu?

  3. Jak spustit úlohu cronu každý den v určitou hodinu?

  1. Jak provést „datum“ uvnitř úlohy Cron Tab?

  2. Jak spustit MySQL v kontejneru Docker

  3. Jak zjistit, zda proces běží uvnitř lxc/Docker?