私はcronを含むDockerイメージを構築しようとしています。 dockerファイルシステムの特定の場所からファイルを削除するcron。以下は私のDockerfileです
FROM ubuntu:latest
MAINTAINER [email protected]
RUN apt-get update && apt-get -y install cron
# Copy testfiles folder to docker container.
COPY ./testfiles /opt/
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
RUN (crontab -l -u root; echo "* * * * * root rm -rf /opt/*") | crontab
# Run the command on container startup
CMD cron
ENTRYPOINT ["/bin/sh", "-c", "/bin/bash"]
すべてが成功しています。私のcronもコンテナに設定されています
roadrunner:test shailesh$ docker run -it crontest /bin/bash
root@ac31f5acc49f:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@ac31f5acc49f:/# crontab -l
* * * * * root rm -rf /opt/*
root@ac31f5acc49f:/# cd /opt/
root@ac31f5acc49f:/opt# ls
file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file20 file21 file22 file23 file24 file25 file3 file4 file5 file6 file7 file8 file9
ただし、実行されておらず、/opt/
フォルダ。誰かが構成の何が間違っているのか教えてもらえますか?.
このようなものを試してください、
FROM ubuntu:latest
MAINTAINER [email protected]
RUN apt-get update && apt-get -y install cron
# Add crontab file in the cron directory
ADD crontab /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
ファイルcrontabを作成し、次のようなエントリを追加します
* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
これがあなたを助けることを願っています!!!
Crontab構文が間違っています。
Cronファイルを配置できる場所は2つあります。
/var/spool/cron/USERNAME
の下。コマンドcrontab
を使用すると、ここに自動的に配置されます。/etc/cron.d
/etc/cron.d
に配置する場合、ファイルとユーザーの間に接続がないため、ファイルには実行しているユーザーの名前が含まれている必要があります。ただし、crontab
コマンドを使用する場合、cron仕様はユーザー(またはcrontab
を呼び出すときに指定したユーザー)に属するcrontabに配置されるため、以下を行う必要はありません。ユーザー名を含めます。
これを修正するには、次の2つのいずれかを実行します。
Crontabコマンドに渡す文字列からユーザー名を削除すると、次のようになります。
RUN(crontab -l -u root; echo "* * * * * rm -rf/opt/*")| crontab
代わりに、次のようにcrontabエントリを/etc/cron.d
の下のファイルに配置できます。
RUN(echo "* * * * * root rm -rf/opt/*"> /etc/cron.d/clearopt)
私は同じコンテキストで同じ問題を抱えています。私のヒントは、コンテナーの起動時に必要なことをすべて実行するbashスクリプトを作成することです。
そしてCMDをDockerfileに設定して、JSON配列構文を使用して実行します。
いくつかのことを行うためにファイルstart.shがあり、&
バックグラウンドで実行し、次にcron && Apache2-foregroungを実行して、cronとApacheサーバーを起動します。
これは私のDockerfileの最後にある最後のコマンドです。
CMD ./start.sh > web/startup.log & cron && Apache2-foreground