Jusqu'à la dernière fois, une fois que vous l'avez démarré, il fonctionnera automatiquement sans rien faire d'autre. Si vous le définissez avec cron, vous pouvez l'exécuter tous les jours, mais si vous le laissez tel quel, vous maintiendrez votre PC en marche. Je veux le faire démarrer sur le serveur d'une manière ou d'une autre.
Le mur ici est que ** ce grattage nécessite l'affichage **. J'ai également essayé le mode sans tête de Chrome, mais cela n'a pas fonctionné.
Donc, cette fois, j'ai décidé de l'implémenter en utilisant un mécanisme appelé Xvfb
qui peut créer un affichage virtuel, bien que ce soit une technologie un peu ancienne.
Xvfb est une application qui fonctionne sous Linux. J'ai donc décidé de l'implémenter à l'aide du conteneur Linux Docker et d'exécuter enfin le lot en utilisant AWS batch.
Commencez par créer l'image Docker que vous utilisez. J'utiliserai CentOS, qui semble avoir été beaucoup utilisé lorsque j'enquêtais sur Xvfb.
Commencez par partir de l'image centOS existante et installez effectivement l'application requise.
mac(host)
docker pull centos #Extraction d'une image centOS depuis Docker Hub
docker run -it -d centos #Début
docker ps #Confirmer le démarrage&Obtenir l'ID du conteneur
docker exec -it b7948c7802eb /bin/bash #Entrez dans le terminal côté conteneur
Tout ce dont tu as besoin
Je vais donc installer chacun d'eux.
Essayez différentes choses dans le conteneur
yum install -y python36 #python mis
python3 -m pip install --upgrade pip #mettre pip
pip install requests #Essayez de mettre les packages nécessaires
...
yum -y install xorg-x11-server-Xvfb #Installez Xvfb
yum -y install firefox #Installez Firefox
Xvfb :1 -screen 0 1600x1200x16 & #Lancez Xvfb
export DISPLAY=:1 #:Utilisez l'affichage défini comme 1
firefox #Lancez Firefox
Oh. Je ne vois pas bien l'écran, mais il semble que Firefox fonctionne ...? Alors maintenant, exécutons mon programme ici.
Maintenant, j'ai commencé à créer le Dockerfile.
En fait, il peut être plus efficace d'essayer d'utiliser la commande docker cp
ou quelque chose comme ça.
FROM centos
ENV TZ JST-9 #(1)
#Définir le répertoire personnel
ENV HOME=/home
WORKDIR $HOME
#Mon appli(Sous l'application)Sous la maison
COPY . $HOME/
RUN yum install -y python36
RUN python3 -m pip install --upgrade pip
RUN pip install -r app/requirements.txt #(2)
RUN yum -y install xorg-x11-server-Xvfb
RUN yum -y install firefox
RUN chmod 744 startup.sh
CMD ["./startup.sh"] #(3)
(1) Apparemment, le fuseau horaire sera UTC. Le temps étant important pour ce lot, nous modifions le fuseau horaire
(2) Au début, j'écrivais ligne par ligne, mais c'était plus simple de les assembler, alors j'ai rassemblé les paquets nécessaires dans requirements.txt. Les packages requis sont ceux qui sont sortis avec la commande pip freeze
.
(3) J'ai trouvé qu'il était nécessaire de démarrer la commande Xvfb au moment de docker run
, j'ai donc créé un shell et l'ai assemblé.
startup.sh
#!/usr/bin/env bash
Xvfb :1 -screen 0 1600x1200x16 &
export DISPLAY=:1
python3 app/source/run.py --run_mode test #À la fin je vais le rendre normal
--gecko téléchargement du pilote pour linux
La structure finale du fichier ressemble à ceci.
├── Dockerfile
├── README.md
├── app
│ ├── drivers
│ │ ├── geckodriver
│ │ └── geckodriver_linux
│ ├── requirements.txt
│ └── source
│ ├── run.py
│ ├── scraping.py
│ ├── make_outputs.py
│ ├── s3_operator.py
│ └── configs.py
├── startup.sh
└── tmp
├── files
│ ├── download
│ ├── fromS3
│ └── toS3
└── logs
Il peut être exécuté avec la commande suivante.
docker build -t myapp .
docker run -it myapp
En fait, ça ne s'est pas passé comme ça ... J'ai l'impression d'avoir tapé la commande ci-dessus environ 40 fois.
Cependant, quand ça se passe bien, c'est émouvant! Je ne vois pas du tout l'écran, mais la console est sortie et il y a des fichiers dans S3.
À la fin, exécutez-le simplement sur AWS ... Je peux voir le but.
Recommended Posts