DevOps
[Docker] 도커 컨테이너 안에서 Cron 설정
brad.min
2023. 9. 21. 14:13
반응형
도커 컨테이너 App을 스케쥴로 일정한 작업을 처리하고 싶을 때 두가지 방법이 있다.
Host에서 도커 Cron을 설정하는 방법과 컨테이너 안에서 Cron을 설정하는 방법이다.
이번에는 컨테이너 안에서 Cron을 설정하는 방법을 알아보았다.
사전 준비
테스트를 위해 Dockerfile로 컨테이너를 실행하였다.
Dockerfile
# python library
FROM python:3.9
# installing required packages
RUN apt-get update && apt-get install -y \
gcc \
cron \
net-tools \
curl \
iputils-ping \
vim
WORKDIR /home/cron-test
# Copy cron file to the container
COPY Cron /home/cron-test
COPY test.py /home/cron-test
COPY Cron /etc/cron.d/cronjob
# Give the permission
RUN chmod +x /etc/cron.d/cronjob
# Add the cron job
RUN crontab /etc/cron.d/cronjob
# Cron Activate
CMD ["cron", "-f"]
도커 파일을 살펴 보면 Cron이라는 파일을 컨테이너 내부의 /home/cron-test 공간에 카피하여 저장한다. 그 다음 컨테이너 내부에 /etc/cron.d/cronjob 경로 복사를 진행했다. 위의 파일을 실행하면 Cron파일 내부에 설정된 크론이 crontab에 설정된다. Cron파일의 내부는 다음과 같다.
* * * * * /usr/local/bin/python3 test.py >> /home/cron-test/test.log 2>&1
Cron 삭제/변경/등록
컨테이너에 접속 후 아래의 명령어를 입력한다.
# access container
docker exec -it [containerid] bash
# crontab check
crontab -l
스케쥴을 변경할 때는 /etc/cron.d/cronjob 파일을 수정하면 되는데 절차는 아래와 같다. crontab -r 명령어로 삭제하고 다시 등록해도 되지만 crontab -e로 바로 수정도 가능하다!
# delete crontab already registered
crontab -r
# fix the crontab
*/5 * * * * /usr/local/bin/python3 test.py >> /home/cron-test/test.log 2>&1
# apply the cron again
crontab /etc/cron.d/cronjob
수정 후 다시 crontab 명령어로 등록해주면 끝~!
반응형