【发布时间】:2016-10-17 21:02:45
【问题描述】:
情况:在我的 crontab 中,我有一份运行 .sh 脚本的工作。该脚本依次执行我的 casperjs casper.js - 一切正常。该脚本在我从命令行运行时执行。从命令行调用 shell 脚本时,可以正常执行。我从 crontab 运行作业并输出到日志文件,我可以看到它正在工作。
但是,我从来没有得到预期的输出:即。 casper_output.json,这是运行的完整 casper.js 文件:
var casper = require('casper').create({
waitTimeout: 10000,
stepTimeout: 10000,
verbose: true,
//debug, write out results, errors
logLevel: "debug",
loadImages: true,
loadPlugins: true,
pageSettings: {
javascriptEnabled: true,
webSecurityEnabled: false
},
onWaitTimeout: function() {
this.echo('** Wait-TimeOut **');
},
onStepTimeout: function() {
this.echo('** Step-TimeOut **');
}
});
//vars for this page
var url = 'http://urltoscrape.com';
var results = [];
var menuResults = [];
var fs = require('fs');
var terminate = function() {
this.echo("Exiting..").exit();
};
var getContent = function() {
//grab the values that we need for json file, store in empty results array
var results = [];
var URL = document.querySelectorAll('#results .event-details-link');
var title = document.querySelectorAll('#results h3');
var date = document.querySelectorAll('#results span');
var desc = document.querySelectorAll('#results p');
for (var i = 0;
//count through URL, title, date and description
i < URL.length
&& i < title.length
&& i < date.length
&& i < desc.length;
i++) {
var innerURL = URL[i].getAttribute("href");;
var innerTitle = title[i].innerText;
var innerDate = date[i].innerText;
//messy regex, TODO: make more efficient
var newDate = innerDate.replace(/\s[at].*$/g,"");
var strip = newDate.replace(/[on]/g,"");
var nows = strip.replace(/\s/g, "");
var innerDesc = desc[i].innerText;
var dept = "Dept";
//push into json, TODO: order
results.push({ URL: innerURL, title: innerTitle, date: nows, desc: innerDesc, dept: dept});
}
return results;
}
var processPage = function() {
//crude but waits for page to load
this.wait(2000, function() {
//run the get content function
results = this.evaluate(getContent);
require('utils').dump(results);
//write to file
fs.write("casper_output.json", JSON.stringify(results, null, ' '), 'w');
});
}
casper.start(url, function() {
this.waitForSelector('#results', processPage, terminate);
});
casper.run();
调用它的shell脚本,casper_run.sh:
#!/bin/bash
PATH=/output/of/path/MAMP/Library/bin
PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs ; /usr/local/bin/casperjs /Applications/AMPPS/www/test/casper.js 2>&1
最后,在我的 crontab 中:
* * * * * /Applications/AMPPS/www/test/casper_run.sh
任何关于为什么 casper_output.json 不从我的 cron 作业中写入(但从命令行运行时)的见解都会非常受欢迎。我研究这个太久了。
谢谢!
【问题讨论】:
标签: json bash shell cron casperjs