2015-04-13 1 views
-1

J'ai un robot de scrapy sur une application élastique beanstalk que je peux courir par SSH comme ceci:Cronjob sur Elastic Beanstalk ne fonctionne pas

  • source /opt/python/run/venv/bin/activate
  • source /opt/python/current/env
  • cd /opt/python/current/app
  • scrapy crawl spidername

Je veux configurer un cronjob pour exécuter ceci pour moi. J'ai donc suivi les suggestions here.

Mon fichier setup.config ressemble à ceci:

container_commands: 
    01_cron_hemnet: 
    command: "cat .ebextensions/spider_cron.txt > /etc/cron.d/crawl_spidername && chmod 644 /etc/cron.d/crawl_spidername" 
    leader_only: true 

Mon fichier spider_cron.txt ressemble à ceci:

# The newline at the end of this file is extremely important. Cron won't run without it. 
* * * * * root sh /opt/python/current/app/runcrawler.sh &>/tmp/mycommand.log 
# There is a newline here. 

Mon fichier runcrawler.sh est situé à /opt/python/current/app/runcrawler.sh et ressemble à ce

#!/bin/bash 

cd /opt/python/current/app/ 
PATH=$PATH:/usr/local/bin 
export PATH 
scrapy crawl spidername 

Je peux naviguer à /etc/cron.d/ et voir que crawl_spidername existe là. Mais quand je cours crontab -l ou crontab -u root -l il dit qu'aucun crontab n'existe.

Je n'obtiens aucune erreur de journal, aucune erreur de déploiement et le fichier /tmp/mycommand.log que j'essaie de sortir du fichier cron n'est jamais créé. On dirait que le cronjob n'est jamais commencé.

Des idées?

+0

Vous êtes sûr que votre code est sans erreur? –

+0

Pas d'erreurs dans le journal, pas d'erreurs de déploiement, et je peux exécuter "scrapy crawl spidername" par SSH sans erreurs. C'est juste que le cronjob ne fonctionne pas, ou peut-être qu'il fonctionne mais la commande ne fait rien (?). Est-il correct d'écrire la commande * * * * * nom d'utilisateur, comme je le fais? –

Répondre

-1

Votre spider_cron.txt a un espace supplémentaire après /opt/python/courant/app/ mais avant scrapy. Ainsi, la commande en cours d'exécution est juste un dossier "/ opt/python/courant/app /"

vôtre

40 9 * * * root /opt/python/current/app/ scrapy crawl spidername > /dev/null 

devrait-elle être

40 9 * * * root /opt/python/current/app/scrapy crawl spidername > /dev/null 

Est-ce que la saisie EXACTEMENT "/opt/python/current/app/scrapy crawl spidername "démarrer votre robot d'exploration?

+0

Non, Scrapy n'est pas un fichier dans/app /. C'est une commande installée. Votre solution ne fonctionne pas et n'est pas correcte. Je viens de mettre à jour ma question avec quelques modifications que j'ai faites, ça ne marche toujours pas. –

+0

Maintenant que vous avez modifié la question qui semble proche de travailler. Si vous vous connectez et ne changez pas de répertoire. Pouvez-vous exécuter votre script en tapant simplement "/opt/python/current/app/runcrawler.sh" –

+0

Cela fonctionne si je fais 'sudo crontab crawl_spidername' et l'ajouter à la crontab racine. Tout fonctionne bien si je le fais. Mais il semble que quand je mets juste le fichier dans '/ etc/cron.d /', ce n'est pas assez pour que le cron soit réellement chargé et exécuté.Donc, cela signifie que je dois aller dans l'instance et ajouter le cronjob chaque fois que je redémarre le serveur ou quelque chose comme ça. –