[Docker] Docker에서의 Crontab 사용

Updated:

Crontab?

  • 리눅스 환경에서의 스케줄러
  • 특정 시간에 등록된 작업 수행

Crontab 기본 명령어

crontab -l # 현재 등록되있는 crontab list

crontab -e # crontab을 편집할 수 있는 편집기

crontab -r # crontab 삭제

주기 설정

*        *          *       *        *        ls -al(0~59) 시간(0~23)(1~31)(1~12) 요일(0~7)

# 매분 실행
* * * * * python test.py

# 특정 시간 실행 
# 매주 금요일 오전 5시 45분에 실행
45 5 * * 5 python test.py

# 반복 실행 
# 매시간 0분 5분 15분에 실행
0,5,15 * * * * python test.py

## 간격 실행
# 매 10분마다 실행
*/10 * * * * python test.py

로그 남기기

* * * * * python test.py > test.log 2>&1
* * * * * python test.py >> test.log 2>&1 # 로그가 쌓임

Docker 환경에서 Crontab

Docker 컨테이너 내부에서 crontab 실행이 잘 안돼서 찾아봤더니 docker file을 만들 때 함께 Crontab을 이미지에 포함 시켜 놓아야 된다고 한다.

이러면 crontab을 바꿀 때 마다 이미지를 다시 짜야 하므로 비효율적이다…

docker에서의 exec 명령어를 Crontab에 등록시켜 docker 내부의 특정 작업을 수행 할 수 있다.

docker exec [컨테이너 이름] [실행 명령어]
docker exec lee python /PATH/test.py

exec 명령어를 shell로 저장 test.sh

crontab -e를 통해 편집기로 들어감

* * * * * /PATH/test.sh >> /PATH/test.log 2>&1 

절대경로를 사용하는 것이 멘탈 건강에 좋다..

만약 log가 permission denied 가 뜬다면 chmod +x 를 통해 shell 실행 권한을 부여 해주자

Leave a comment