프로그래밍/Docker

Docker에서 shellscript crontab으로 돌리기

Lou Park 2022. 6. 18. 06:09

docker container내의 crontab에서 scripts/batch.sh를 실행시키고자 한다.

5분마다 실행을하고, 필요한 환경변수를 crontab 작업에 등록시켜준다.

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TZ=Asia/Seoul
*/5 * * * * /batch/scripts/batch.sh 2>&1 | tee -a /proc/1/fd/1 /batch/logs/batch.cron.log

 

# SHELL=/bin/bash
등록된 작업을 실행시킬 쉘을 직접 지정한다. 기본값은 /bin/sh이다.

 

# PATH=/user/local/sbin...
쉘에서 쓰는 환경변수와 crontab에서 사용하는 환경변수는 다르므로 crontab의 환경변수는 따로 설정해주어야한다. set 명령어를 입력하면 현재 쉘에서 사용중인 환경변수를 확인할 수 있는데, 이를 등록시켜준 것이다.

set | egrep '^PATH'

 

# /proc/1/fd/1
주목할점은 /proc/1/fd/1인데, 이것은 docker logs <container> 명령어로 확인되는 도커의 표준출력이다. 비슷하게, /proc/1/fd/2는 표준에러가 된다. 이렇게 세팅할경우 Shellscript의 표준에러와 출력이 docker log에도 찍히고, batch.cron.log라는 로그 파일에도 append 된다.