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 手動執行 shell 腳本時,結果就是這樣。
無法打開文件:/usr/share/nginx/private/mpd_calls_for_service/scrape_mpd_calls.js 不安全的 JavaScript 嘗試使用 URL 訪問框架 about:blank from frame with 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
我在過去兩天嘗試的解決方案包括
- 所有受影響文件的 CHMOD 777。
- 在 sudo 時編輯 crontab-e。
- 通過 npm -g 重新安裝 PhantomJS 和 CasperJS。
不過,經過多次嘗試,我陷入了死胡同,準備開始拔頭髮。社區的任何幫助將不勝感激。
我最終只是在帶有 && 的單個 crontab 行中執行命令,並在 bash -l -c 語句中執行,它現在可以工作了!
我也必須弄清楚這一點,但至少執行 casperjs 要求您有可用的變數,當您將 shell 作為登錄 shell 載入時會載入這些變數。就我而言,我不想在腳本中硬編碼 casperJS 的路徑,因為它已經在我的 mashine 的 $PATH 中設置了。這導致發現僅從 crontab(或在我的情況下為 ANT)生成 shell 不會載入 .rc 文件,因此沒有路徑。除此之外,casperJS 可能需要登錄 shell 中提供的更多變數。
bash -l -c
將 bash 作為登錄 shell 載入的方法也是如此。