GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So führen Sie einen Cron-Job in einem Docker-Container aus

So betreibe ich einen meiner Cron-Container.

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!"

So bauen

docker build -t mycron .

Lauf so

docker run -d mycron

Fügen Sie Ihre eigenen Skripte hinzu und bearbeiten Sie die crontab.txt und erstellen Sie einfach das Image und führen Sie es aus. Da es auf Alpine basiert, ist das Bild sehr klein.


crond Funktioniert gut mit Tiny auf Alpine

RUN apk add --no-cache tini

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

sollte aber nicht als Container-Hauptprozess (PID 1) ausgeführt werden, da es Probleme mit dem Ernten von Zombies und Problemen mit der Signalverarbeitung gibt. Weitere Informationen finden Sie in dieser Docker-PR und in diesem Blogbeitrag.


Die Lösung von @ken-cochrane ist wahrscheinlich die beste, es gibt jedoch auch eine Möglichkeit, dies zu tun, ohne zusätzliche Dateien erstellen zu müssen.

Um es ohne zusätzliche Dateien zu machen:

Der Weg zu gehen ist, den Cron in Ihrem entrypoint.sh zu setzen Datei.

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. Wie führe ich einen Befehl in einem laufenden Systemd-Container aus?

  2. Wie führe ich ein Programm in einem Docker-Container aus?

  3. So führen Sie einen Befehl in einem laufenden Docker-Container aus

  4. Wie richte ich einen Cron-Job ein, um jede Stunde eine ausführbare Datei auszuführen?

  5. Wie richte ich einen CRON-Job so ein, dass er alle 10 Sekunden unter Linux ausgeführt wird?

So führen Sie den ELK-Stack im Docker-Container aus

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So führen Sie Docker-Container aus

So beenden Sie einen Docker-Container

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?