Réponse acceptée peut être dangereuse dans un environnement de production.
Lorsque vous utilisez CMD cron && tail -f /var/log/cron.log时,cron进程基本上会分叉以便在后台执行cron,主进程退出并让您在前台执行 tailf . Le processus cron en arrière-plan peut s'arrêter ou échouer sans que vous vous en rendiez compte, votre conteneur s'exécutera toujours en mode silencieux et votre outil d'orchestration ne le redémarrera pas.
En utilisant la redirection shell de base, vous souhaiterez peut-être faire quelque chose comme ceci :
# must be ended with a new line "LF" (Unix) and not "CRLF" (Windows)
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.
FROM ubuntu:latest
MAINTAINER docker@ekito.fr
RUN apt-get update && apt-get -y install cron
# Copy hello-cron file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/hello-cron
# Apply cron job
RUN crontab /etc/cron.d/hello-cron
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
Alternativement, assurez-vous que votre travail lui-même redirige directement vers stdout/stderr plutôt que vers un fichier journal, comme mentionné dans la réponse de hugoShaka :
Réponse acceptée peut être dangereuse dans un environnement de production.
Lorsque vous utilisez
CMD cron && tail -f /var/log/cron.log
时,cron进程基本上会分叉以便在后台执行cron
,主进程退出并让您在前台执行tailf
. Le processus cron en arrière-plan peut s'arrêter ou échouer sans que vous vous en rendiez compte, votre conteneur s'exécutera toujours en mode silencieux et votre outil d'orchestration ne le redémarrera pas.En utilisant la redirection shell de base, vous souhaiterez peut-être faire quelque chose comme ceci :
Votre CMD sera :
CMD ["cron", "-f"]
Mais : que se passe-t-il si vous souhaitez exécuter la tâche en tant qu'utilisateur non root .
Vous pouvez copier
crontab
dans une image afin que les conteneurs lancés à partir de cette image exécutent le travail.Important : Comme dans docker-cron numéro 3 : utilisez
cron
LF pour fichiers, pas CRLF.Voir Exécuter des tâches cron avec Docker” /github.com/julienboulay" rel="noreferrer">Julien Boulay dans son Ekito/docker-cron :
Si vous vous demandez ce qu'est
2>&1
2>&1
, Ayman Hourieh explique.Cependant : si
cron
meurt, le conteneur continue de fonctionner .(voir le commentaire de Gaafar et Comment rendre l'installation de
apt-get
:apt-get
moins bruyante ?apt-get -y install -qq --force-yes cron
apt-get -y install -qq --force-yes cron
fonctionne également)Comme Nathan Lloyd l'a commenté sur :
Alternativement, assurez-vous que votre travail lui-même redirige directement vers stdout/stderr plutôt que vers un fichier journal, comme mentionné dans la réponse de hugoShaka :
Remplacez la dernière ligne du Dockerfile par
Mais : que se passe-t-il si vous souhaitez exécuter la tâche en tant qu'utilisateur non root .
Voir aussi (à propos de
”cron -f
cron -f
,即cron“前台”)“docker ubuntucron -f
, le "frontend" cron) "docker ubuntucron -f
Non je travailleEric a ajouté dans les commentaires
: 🎜Voir "docker
CMD
”末尾的tail -f
sortie > non affiché ".Voir "Exécuter Cron dans Docker" pour plus d'informations (avril 2021) de Jason Kulatunga comme il commenté ci-dessous
Voir les images de Jason
AnalogJ/docker-cron
Basé sur :Installation Dockerfile
cronie
/crond
, selon la distribution.Le point d'entrée s'initialise
/etc/environment
puis appelle