나는 주로 스크래피 스크레이퍼로 구성된 아주 작은 프로그램을 작성했습니다. 도커 컨테이너에 패키징되어 있으며 cron에 의해 호출되는 스크레이퍼가 필요합니다.
내 docker-compose 파일은 다음과 같습니다.
version: '2'
services:
admin-panel:
env_file: ./Admin-Panel/.env
build: ./Admin-Panel/
volumes:
- ./Admin-Panel/app:/code/app
- ./Admin-Panel/flaskadmin.py:/code/flaskadmin.py
ports:
- "5000:5000"
scraper:
env_file: ./Admin-Panel/.env
build: ./Scraper/
volumes:
- ./Scraper/spiders:/spiders
내 Scraper Dockerfile은 다음과 같습니다.
FROM ubuntu:latest
ENV TERM xterm
RUN apt-get update
RUN apt-get install -y python3-pip python3.5-dev build-essential
RUN apt-get install -y libssl-dev nano cron libpq-dev libffi-dev curl
ADD ./requirements /requirements
ADD crontab /etc/cron.d/scrapers
RUN pip3 install --upgrade pip
RUN pip3 install -r /requirements/base.txt
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log
내 crontab은 다음과 같습니다.
* * * * * root /usr/local/bin/scrapy runspider /spiders/myspider.py
* * * * * root /bin/date >> /tmp/cron_output
이것은 Sierra를 실행하는 Mac에서 로컬로 실행할 때 완벽하게 작동하지만 Amazon Linux AMI를 실행하는 Amazon EC2 인스턴스에 넣으면 크론이 호출되지 않습니다. Filezilla를 사용하여 Mac에서 Amazon EC2 인스턴스로 파일을 전송했습니다.
AWS EC2 :
Docker 버전 1.12.6, 빌드 7392c3b / 1.12.6
내 MacBook :
Docker 버전 17.03.0-ce, 빌드 60ccb22
줄을 추가하면
* * * * * root /bin/date >> /tmp/cron_output
crontab -e를 사용하면 아무 일도 일어나지 않습니다. cron.log 파일이 비어 있습니다.
최신 정보:
rsyslog를 설치 한 다음 시작했습니다.
service rsyslog start
이제 / var / log / syslog에서
3 월 25 일 21:49:01 4406b0e05b9f CRON [464] : 지정된 세션에 대한 항목을 만들거나 제거 할 수 없습니다.
마침내 https://github.com/sameersbn/docker-gitlab/issues/173 덕분에 해결책을 찾았습니다.
/etc/pam.d/cron에서 다음 줄을 주석 처리했습니다.
session required pam_loginuid.so
docker-compose에서 자동으로이 작업을 수행하는 방법을 알아 내면됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다