はじめに
備忘録
タイトルの通りです。
どなたかのお役に立てれば幸いです。
前提
ファイル構造は以下とします。
src
の中がPythonコンテナのroot
です。
python/
├─ src/
│ └─ test.py
│
├─ crontab
└─ Dockerfile
crontab
ファイルの中身は以下とします。
上側では、実行された時刻を/var/log/cron.log
に出力しています。
下側では、test.py
を実行し、その結果を/var/log/cron.log
に出力しています。
crontab
* * * * * /bin/bash -l -c 'echo `date` >> /var/log/cron.log' 2>&1
* * * * * /usr/local/bin/python3 /root/test.py >> /var/log/cron.log 2>&1
test.py
ファイルの中身は以下とします。
test.py
print("hello cron")
print('こんにちは')
解決方法
Dockerfileの中に、以下を追加することで実現できました。
vim
とcron
をインストールして、crontab
というファイルを/var/spool/cron/crontabs/root
にコピーしています。
その後、コピーしたファイルを一度実行することにより、crontab
ファイルを読み込ませています。
Dockerfile
RUN apt-get install -y vim cron
COPY crontab /var/spool/cron/crontabs/root
RUN crontab /var/spool/cron/crontabs/root
CMD ["cron", "-f"]
Dockerコンテナを起動し、Pythonコンテナ内でcronが動いているか確認してみます。
$ docker compose up -d --build
[+] Building ...
︙
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6ba6ff5f53e python3 "cron -f" 1 minutes ago Up 1 minutes python3-1
$ docker container exec -it python3-1 bash
root@a6ba6ff5f53e:~#
root@a6ba6ff5f53e:~# ls
test.py
root@a6ba6ff5f53e:~# service cron status
cron is running.
root@a6ba6ff5f53e:~# tail -f /var/log/cron.log
Mon Apr 22 17:24:01 JST 2024
hello cron
こんにちは