Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇石英';s拼图_Java_Quartz Scheduler_Scrapy - Fatal编程技术网

Java 爪哇石英';s拼图

Java 爪哇石英';s拼图,java,quartz-scheduler,scrapy,Java,Quartz Scheduler,Scrapy,我的项目是建立一个调度系统,通过cron表达式在特定时间调度某个爬虫,我选择使用quartz。我在作业对象中创建一个子流程。当计划作业时,它将创建一个进程来启动一个scrapy crawler来获取数据,父进程是使用waitFor()java api进行等待。 public void execute(JobExecutionContext context) throws JobExecutionException { try { JobKey j

我的项目是建立一个调度系统,通过cron表达式在特定时间调度某个爬虫,我选择使用quartz。我在作业对象中创建一个子流程。当计划作业时,它将创建一个进程来启动一个scrapy crawler来获取数据,父进程是使用
waitFor()java api进行等待。

 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是一种“搔痒爬行糠秕”。然而,当它被安排时,我发现这个过程只是在很短的时间内完成的,然后我使用了
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+,整个进程在此停止。如何修复它并让子进程在此作业对象中执行?

我怀疑您的子进程生成了一些输出,然后被阻止,因为您没有在主进程中读取此输出。如果是,您有两种解决问题的方法:

  • 显式读取子进程的输出流以防止其阻塞

  • (仅限Java 7)使用ProcessBuilder API将子项目的流与父项目的流合并:

    ProcessBuilder pb=新的ProcessBuilder(“myCommand”、“myArg1”、“myArg2”)
    pb.inheritIO()
    进程p=pb.start()


我怀疑您的子进程生成了一些输出,然后被阻止,因为您没有在主进程中读取此输出。如果是,您有两种解决问题的方法:

  • 显式读取子进程的输出流以防止其阻塞

  • (仅限Java 7)使用ProcessBuilder API将子项目的流与父项目的流合并:

    ProcessBuilder pb=新的ProcessBuilder(“myCommand”、“myArg1”、“myArg2”)
    pb.inheritIO()
    进程p=pb.start()


我使用strace跟踪scrapy进程,发现它处于休眠状态,并在写入系统调用时暂停:write(2,“2013-06-17 21:30:02+0800[data]。它已在目标文件中写入了一些内容。我使用strace跟踪scrapy进程,发现它处于休眠状态,并在写入系统调用时暂停:write(2,“2013-06-17 21:30:02+0800[data]。它已经在目标文件中写入了一些内容。。