我的项目是建立一个调度系统,通过cron表达式在特定时间调度一些爬虫,我选择使用quartz。我在 Job 对象中创建了一个子进程。当作业被调度时,它会创建一个进程来启动一个scrapy爬虫来获取数据,并且父进程正在等待使用waitFor() java api.
Sth,如下所示:
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
JobKey jobKey = context.getJobDetail().getKey();
System.out.println("CrawlerJob says: " + jobKey + " executing at " + new Date());
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
String scrapycmd=dataMap.getString("ScrapyCMD");
Process process=Runtime.getRuntime().exec(scrapycmd);
System.out.println("wait for process...");
process.waitFor();
}catch(InterruptedException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
_log.info(e.toString());
}
}
ScrapyCMD 是scrapy crawl myspider
. 但是,当它安排好的时候,我发现这个过程只能在很短的时间内工作,然后我正在使用ps -aux | grep python
:
gabriel 4202 0.0 1.0 755672 39400 pts/2 Sl+ 22:14 0:02 /usr/local/bin/python /usr/local/bin/scrapy crawl myspider
子进程的状态是sl+,整个进程在那里停止。如何修复它并让子进程在此 Job 对象中执行?