web-dev-qa-db-ja.com

Docker cronが機能しない

私は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/フォルダ。誰かが構成の何が間違っているのか教えてもらえますか?.

1
Shailesh Sutar

このようなものを試してください、

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

これがあなたを助けることを願っています!!!

5
Prabhin

Crontab構文が間違っています。

Cronファイルを配置できる場所は2つあります。

  • ユーザー自身のcrontabファイル内、通常は/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)
1
Jenny D

私は同じコンテキストで同じ問題を抱えています。私のヒントは、コンテナーの起動時に必要なことをすべて実行するbashスクリプトを作成することです。
そしてCMDをDockerfileに設定して、JSON配列構文を使用して実行します。

いくつかのことを行うためにファイルstart.shがあり、&バックグラウンドで実行し、次にcron && Apache2-foregroungを実行して、cronとApacheサーバーを起動します。

これは私のDockerfileの最後にある最後のコマンドです。

CMD ./start.sh > web/startup.log & cron && Apache2-foreground
0
Micael Mota