cronjob을 사용해야 하는 도커 컨테이너를 설정하고 있습니다 awscli
(환경 변수를 통한 인증).
cron은 내 docker 변수를 볼 수 없기 때문에 명령을 실행하기 전에 파일로 인쇄하고 가져옵니다 aws
.
나는 가지고있다확인됨변수는 cron에서 설정되지만 awscli
아직 본 적이 없습니다.
다음은 문제를 보여주는 최소 프로젝트입니다.
도커파일:
FROM debian:jessie
# Install aws and cron
RUN apt-get -yqq update
RUN apt-get install -yqq awscli cron rsyslog
# Create cron job
ADD crontab /etc/cron.d/hello-cron
RUN chmod 0644 /etc/cron.d/hello-cron
# Output environment variables to file
# Then start cron and watch log
CMD printenv > /env && cron && service rsyslog start && tail -F /var/log/*
예약 된 일들:
# Demonstrates that cron can see variables
*/2 * * * * root /usr/bin/env bash -c '. /env && echo $AWS_DEFAULT_REGION' >> /test1 2>&1
# Attempt to list s3 buckets knowing environment variables are set
*/2 * * * * root /usr/bin/env bash -c '. /env && aws s3 ls' >> /test2 2>&1
나는 결국 돌아왔다 Unable to locate credentials. You can configure credentials by running "aws configure"
. 그러나 Docker 컨테이너 내에서 동일한 명령을 실행하면 버킷 목록이 표시됩니다.
이것은 .env
내가 docker에 전달하는 파일입니다.
.env:
## AWS SETTINGS
AWS_ACCESS_KEY_ID=(key removed)
AWS_SECRET_ACCESS_KEY=(secret removed)
AWS_DEFAULT_REGION=us-west-2
awscli
환경 변수는 볼 수 없고 cron 내부에서만 볼 수 있는 이유를 아는 사람이 있습니까 ?
답변1
crontab(5)
환경 변수는 에서 직접 설정할 수 있습니다. 이렇게 하면 추가 셸 실행 및 소스 단계의 비용과 복잡성을 피할 수 있습니다. 즉, hello-cron
파일에는 다음과 같은 내용이 포함됩니다.
AWS_ACCESS_KEY_ID=(key removed)
AWS_SECRET_ACCESS_KEY=(secret removed)
AWS_DEFAULT_REGION=us-west-2
*/2 * * * * root echo $AWS_DEFAULT_REGION >> /test1 2>&1
*/2 * * * * root aws s3 ls >> /test2 2>&1