我搞不懂为什么索尔总是崩溃。我编写了一个shell脚本,它将自动重新引导它:
#!/bin/bash
declare -a arr=(tomcat7 nginx mysql);
for i in "${arr[@]}"
do
echo "Checking $i"
if (( $(ps -ef | grep -v grep | grep $i | wc -l) > 0 ))
then
echo "$i is running!!!"
else
echo "service $i start\n"
service $i start
fi
done
# re-run, but this time do a restart if its still not going!
for i in "${arr[@]}"
do
echo "Checking $i"
if (( $(ps -ef | grep -v grep | grep $i | wc -l) > 0 ))
then
echo "$i is running!!!"
else
service $i restart
fi
done然而,即使这样,似乎也不起作用。我不得不再次手动重新启动它,因为它已经离线了3天(只是碰巧注意到了,因为我正在检查错误日志)。
辍学人数比以前少得多(也许每隔几周就有一次)。不过,我想在发生这种情况时得到通知。
我正在使用Perl模块:http://search.cpan.org/~petdance/WebService-Solr-0.23/lib/WebService/Solr.pm来完成这项工作(是的,我知道它非常有限,但它可以完成我所需要的工作)
我的旧代码是:
$solr = WebService::Solr->new( SOLR )但是,当Solr脱机时,会收到一条令人讨厌的错误消息:
无法解析JSON响应:格式错误的JSON字符串、标记、数组、对象、数字、字符串或原子,在字符偏移量0处(在“无法连接到loc.”之前)在/srv/www/site.net/www/cgi-bin/admin/WebService/Solr/Response.pm 42号线。无法连接到本地主机:8080
我试图使用eval {}来捕获错误,但即使这样也不起作用:
my $solr;
eval {
$solr = WebService::Solr->new( SOLR )
};
if (@$) {
print $IN->header;
print "FOO: @$";
exit;
}有人对我如何发现这些错误有什么建议吗?(然后我会发电子邮件给我,这样我就知道问题已经发生了!)
发布于 2016-03-12 09:34:09
代码的问题在于,转换异常的不是WebService::Solr->new(),而是$response->content,它是从$response->docs隐式调用的。
您应该将eval移动到代码的这一部分:
my $response = $solr->search( $query );
eval {
for my $doc ( $response->docs ) {
print $doc->value_for( $id );
}
};
if ($@) {
print "FOO: $@ \n\n";
}https://stackoverflow.com/questions/35934398
复制相似问题