Cron 작업의 CasperJS 및 PHP는 파일을 열 수 없으며 수동으로 실행하면 제대로 작동합니다.

Cron 작업의 CasperJS 및 PHP는 파일을 열 수 없으며 수동으로 실행하면 제대로 작동합니다.

최근 Ubuntu에 새로운 DigitalOcean LEMP 환경이 생겼습니다. CasperJS를 사용하여 외부 웹사이트의 데이터를 JSON 파일로 스크랩하는 SH 스크립트와 JSON을 구문 분석하고 MySQL 데이터베이스를 업데이트하는 PHP 스크립트를 만들려고 합니다. SH는 cron 작업에 의해 실행됩니다. 내 crontab은 다음과 같으며 90분마다 실행되도록 되어 있습니다.

# 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

그리고 문제의 SH 파일은 다음과 같습니다.

#!/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

SSH의 터미널을 통해 이러한 코드 줄을 개별적으로 실행하면 문제가 없습니다. 그러나 SSH 또는 Cron을 통해 쉘 스크립트를 수동으로 실행하면 이런 일이 발생합니다.

파일을 열 수 없습니다: /usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls.js 안전하지 않은 JavaScript URL about:blank, URL file:///usr/local/lib/node_modules/casperjs/bin /에서 프레임에 액세스하려고 합니다. 부트스트랩 .js. 도메인, 프로토콜, 포트가 일치해야 합니다.

안전하지 않은 JavaScript는 URL file:///usr/local/lib/node_modules/casperjs/bin/bootstrap.js 프레임에서 about:blank URL 프레임에 액세스하려고 시도합니다. 도메인, 프로토콜, 포트가 일치해야 합니다.

입력 파일을 열 수 없습니다: /usr/share/nginx/private/mpd_calls_for_service/parse_json_file.php

지난 이틀 동안 시도한 솔루션은 다음과 같습니다.

  1. 영향을 받는 모든 파일에 CHMOD 777을 수행합니다.
  2. sudoing 시 crontab -e를 편집하세요.
  3. npm -g를 통해 PhantomJS 및 CasperJS를 다시 설치합니다.

많은 시도 끝에 막다른 골목에 이르렀고 이제 머리를 뽑을 준비가 되었습니다. 커뮤니티의 어떤 도움이라도 대단히 감사하겠습니다.

답변1

나는 &&가 포함된 단일 crontab 줄과 bash -l -c 문 내부에서 명령을 실행했고 지금 작동 중입니다!

답변2

이것도 알아내야 하겠지만 적어도 casperjs를 실행하려면 셸을 로그인 셸로 로드할 때 로드할 수 있는 변수가 있어야 합니다. 내 경우에는 내 컴퓨터의 $PATH에 이미 설정되어 있기 때문에 스크립트에서 casperJS 경로를 하드코딩하고 싶지 않았습니다. 이로 인해 crontab(또는 내 경우에는 ANT)에서 쉘을 생성하면 .rc 파일이 로드되지 않으므로 경로가 없다는 사실이 발견되었습니다. 이 외에도 casperJS는 로그인 셸에 더 많은 변수를 제공해야 할 수도 있습니다. 이것이 bash -l -cbash를 로그인 쉘로 로드하는 방법입니다.

관련 정보