Cron 作业中的 CasperJS 和 PHP 无法打开文件,手动运行时工作正常

Cron 作业中的 CasperJS 和 PHP 无法打开文件,手动运行时工作正常

我最近在 Ubuntu 上获得了新的 DigitalOcean LEMP 环境。我尝试制作一个 SH 脚本,使用 CasperJS 将数据从外部网站抓取到 JSON 文件,并制作一个 PHP 脚本来解析 JSON 并更新 MySQL 数据库。 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 手动运行 shell 脚本时,结果就是这样。

无法打开文件:/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 /bootstrap.js。域、协议和端口必须匹配。

不安全的 JavaScript 尝试从 URL file:///usr/local/lib/node_modules/casperjs/bin/bootstrap.js 的框架访问 URL about:blank 的框架。域、协议和端口必须匹配。

无法打开输入文件:/usr/share/nginx/private/mpd_calls_for_service/parse_json_file.php

这两天我尝试过的解决方案包括

  1. 对所有受影响的文件进行 CHMOD 777。
  2. sudo 时编辑 crontab -e。
  3. 通过 npm -g 重新安装 PhantomJS 和 CasperJS。

经过多次尝试后,我已经走进了死胡同,准备开始拔掉我的头发。来自社区的任何帮助将不胜感激。

答案1

我最终只是在带有 && 的单个 crontab 行中运行命令,并在 bash -l -c 语句内运行,它现在正在工作!

答案2

我也必须弄清楚这一点,但至少执行 casperjs 要求您拥有可用的变量,这些变量在您将 shell 作为登录 shell 加载时加载。就我而言,我不想在脚本中硬编码 casperJS 的路径,因为它已经在我的机器上的 $PATH 中设置了。然后这导致发现仅从 crontab (或者在我的例子中,ANT)生成 shell 不会加载 .rc 文件,因此没有路径。除此之外,casperJS 可能需要登录 shell 中提供的更多变量。这bash -l -c就是将 bash 加载为登录 shell 的方法。

相关内容