MongoDB サーバーのステータスを毎分チェックし、ダウンしている場合は通知する Perl5 スクリプトを作成しようとしています。このタスクに関する提案は大歓迎です。現在、「MongoDB」モジュールと「MongoDB::MongoClient」を使用して接続を確立し、サーバーが利用可能かどうかを確認しています。基本的な考え方は次のとおりです。
while(1)
{
my $conn = connectMongoDB();
if($conn){
sleep 60;
}
else{
sendMail();
last;
}
}
sub connectMongoDB
{
my $client;
eval{ $client = MongoDB::MongoClient->new( host => "mongodb://:\@$server");};
return ($client)?1:0;
}
主な問題は、サーバーから切断する方法がないことです。cpanページには次のように書かれています:
「データベースから明示的に切断する方法はありません。ただし、MongoDB::MongoClient オブジェクトへの参照が存在しない場合、接続は自動的に閉じられ、クリーンアップされます。これは、$client がスコープ外になった場合に発生します (未定義の場合はそれ以前)。それは undef で)」
「undef」とサブルーチンを試しました。それらのどれも接続を終了しません。ループのため、接続数は増加し続けます。接続数を制御し続けるために試みることができる他の方法はありますか?
この問題に取り組むための他の提案は、crontab を含まない限り高く評価されます。
ありがとう。
編集:
これは、db バージョンが v2.4.4、MongoDB モジュール バージョンが 0.701.4 で、スリープ時間が 2 秒に設定されている場合の出力です。MongoDB モジュールを 0.702.1 にアップグレードした後も問題は解決しません。
Fri Aug 16 20:33:06.986 [initandlisten] connection accepted from 127.0.0.1:51031 #3 (1 connection now open)
Fri Aug 16 20:33:08.989 [initandlisten] connection accepted from 127.0.0.1:51033 #4 (2 connections now open)
Fri Aug 16 20:33:10.991 [initandlisten] connection accepted from 127.0.0.1:51034 #5 (3 connections now open)
Fri Aug 16 20:33:12.994 [initandlisten] connection accepted from 127.0.0.1:51035 #6 (4 connections now open)
Fri Aug 16 20:33:14.996 [initandlisten] connection accepted from 127.0.0.1:51036 #7 (5 connections now open)
Fri Aug 16 20:33:16.999 [initandlisten] connection accepted from 127.0.0.1:51038 #8 (6 connections now open)
Fri Aug 16 20:33:19.003 [initandlisten] connection accepted from 127.0.0.1:51039 #9 (7 connections now open)
Fri Aug 16 20:33:21.006 [initandlisten] connection accepted from 127.0.0.1:51040 #10 (8 connections now open)
Fri Aug 16 20:33:23.009 [initandlisten] connection accepted from 127.0.0.1:51042 #11 (9 connections now open)
Fri Aug 16 20:33:25.013 [initandlisten] connection accepted from 127.0.0.1:51043 #12 (10 connections now open)
Fri Aug 16 20:33:27.016 [initandlisten] connection accepted from 127.0.0.1:51044 #13 (11 connections now open)
Fri Aug 16 20:33:29.019 [initandlisten] connection accepted from 127.0.0.1:51045 #14 (12 connections now open)
Fri Aug 16 20:33:31.022 [initandlisten] connection accepted from 127.0.0.1:51047 #15 (13 connections now open)
編集2:解決しました!!
問題は auto_connect オプションに関連していると思います。無効にすると、コードは正常に機能します。以下は、今のところ機能するものです。
sub connectMongoDB
{
my $client;
eval{
$client = MongoDB::MongoClient->new( host => "mongodb://:\@$server",
auto_connect => 0);
$client->connect;
};
return (!$@)?1:0;
}
一番