首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Perl提交要在后台运行的作业

使用Perl提交要在后台运行的作业
EN

Stack Overflow用户
提问于 2015-04-29 16:00:16
回答 1查看 798关注 0票数 0

我有一个perl脚本,我在其中提交了一个hadoop命令以在后台运行,在while循环中为另一个输入文件中的每个记录执行。我的场景是,我必须向unix发出hadoop命令并使其在后台运行,而不是等待后台进程完成,然后转到输入文件中的下一条记录并触发下一条记录。下面的代码在后台提交hadoop命令,但它会等待它完成,这是我不想要的。

代码语言:javascript
复制
open(my $data, '<', $file) or die "Could not open '$file' $!\n";

while (my $line = <$data>) {
  chomp $line;
  my @fields = split "," , $line;
  if( $fields[7] == 'Y' ) {
`nohup sqoop export
--connect
"jdbc:sqlserver://sqlserver:1433;database=$fields[0];user=sa;password=pwd"
--table $fields[2]
--export-dir $src_dir
--input-fields-terminated-by '$fields[3]'
--input-lines-terminated-by '$fields[4]'
--m $fields[5]
--staging-table $fields[6]
--clear-staging-table
--batch > $tgt_dir/$fields[2].out & `;
echo $! > $pid_file;
} 
else {
   next;
}
}

请告诉我我该怎么做..

此外,hadoop命令可以运行几分钟以上。在pid的帮助下,我必须让脚本等待后台命令,这些命令被触发,并根据hadoop命令的STDOUT文件给出报告。

需要帮助才能做到这一点……

EN

回答 1

Stack Overflow用户

发布于 2015-04-29 19:57:28

我认为您的问题是perl中的nohup [command] &没有像您预期的那样工作。参见here (与标准输出有关的内容。此外,您的回声应该在反引号内)。

例如:

代码语言:javascript
复制
perl -E 'say `nohup sleep 30 & echo \$! > foo.pid &`'

不会在后台运行。

但是:

代码语言:javascript
复制
perl -E 'say `nohup sleep 30 > /dev/null & echo \$! > foo.pid`'

都会起作用的。话虽如此,建议您在google上搜索更多关于perl后台进程的评论是有根据的。特别是使用fork() (或使用它的某个cpan模块),然后从那里管理子进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29937693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档