CasperJS e PHP em Cron Job não é possível abrir arquivos, funciona bem quando executar manualmente

1

Eu recentemente adquiri um novo ambiente DigitalOcean LEMP com o Ubuntu. Eu tentei criar um script SH que usa o CasperJS para coletar dados de um site externo para um arquivo JSON e um script PHP para analisar o JSON e atualizar um banco de dados MySQL. O SH é executado por um cron job. Meu crontab é o seguinte, destinado a ser executado a cada 90 minutos.

# m h  dom mon dow   command
0 0,3,6,9,12,15,18,21 * * * /bin/sh /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls_cron.sh
30 1,4,7,10,13,16,19,22 * * * /bin/sh /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls_cron.sh

E o arquivo SH em questão é.

#!/bin/sh
/usr/local/bin/casperjs /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls.js
/usr/bin/php /usr/share/nginx/private/mpd_calls_for_service/parse_json_file.php

A execução dessas linhas de código individualmente via Terminal no SSH funciona bem. No entanto, ao executar o script de shell manualmente via SSH ou o Cron, esse é o resultado.

Unable to open file: /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls.js Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///usr/local/lib/node_modules/casperjs/bin/bootstrap.js. Domains, protocols and ports must match.

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///usr/local/lib/node_modules/casperjs/bin/bootstrap.js. Domains, protocols and ports must match.

Could not open input file: /usr/share/nginx/private/mpd_calls_for_service/parse_json_file.php

As soluções que experimentei nos últimos dois dias incluíram

  1. CHMOD 777 para todos os arquivos afetados.
  2. Editando o crontab-e enquanto sudo.
  3. Reinstalando o PhantomJS e o CasperJS via npm -g.

Depois de várias tentativas, estou em um beco sem saída e pronto para começar a arrancar meu cabelo. Qualquer assistência da comunidade seria apreciada.

    
por anthonyjesmok 19.06.2015 / 05:23

2 respostas

0

Acabei de executar os comandos em uma única linha crontab com & & e dentro de uma instrução bash -l -c, está funcionando agora!

    
por 27.06.2015 / 23:09
0

Eu tive que descobrir isso também, mas pelo menos a execução de casperjs requer que você tenha variáveis disponíveis que são carregadas quando você carrega um shell como um shell de login. No meu caso, eu não senti como codificar o caminho para o casperJS no meu script porque ele já estava definido no $ PATH no meu mashine. Isso levou à descoberta de que apenas gerar um shell do crontab (ou, no meu caso, ANT) não carrega os arquivos .rc, portanto, não havia caminho. Além disso, o casperJS pode requerer ainda mais variáveis que são fornecidas em um shell de login. então bash -l -c é o caminho a percorrer para carregar o bash como um shell de login.

    
por 21.07.2015 / 17:05