问题:POE模块的使用
时间:2010-09-02
来源:互联网
- se strict;
- use Net::Ftp;
- use Socket;
- use Sys::Hostname;
- use POE;
- $|++;
- my $host = $ARGV[0]||get_ip();
- my $user = $ARGV[1]||'ftpadmin';
- my $pwd = $ARGV[2]||'adminftp1';
- create POE::Session(
- inline_states =>
- {_start => \&start,
- _stop => sub{print "exit\n";exit(0);},
- watcher => \&ftp_watch,
- },
- );
- POE::Kernel->run;
-
- sub start
- {
- $_[KERNEL]->yield('watcher',$host,$user,$pwd);
- $_[HEAP]->{max_try} = 10;
- $_[HEAP]->{try_time} =0;
- }
-
- sub ftp_watch
- {
- print "ok\n";
- my ($kernel,$heap,$host,$user,$pwd) = @_[KERNEL,HEAP,ARG0..ARG2];
- my $ftp=Net::FTP->new($host,Debug=>0,Timeout=>120,Passive => 0);
- if (!$ftp)
- {
- # restart();
- print "restart\n";
- print $heap->{try_time},"\t",$heap->{max_try},"\n";
- if (++$heap->{try_time} > $heap->{max_try})
- {
- print 'restart ftp-server faild,i will exit after 5sec',"\n";
- $kernel->yield('_stop');
- }
- $kernel->yield("watcher",$host,$user,$pwd);
- }
- $ftp->quit();
- $heap->{try_time} = 0;
- print "\rftp server is normal";
- # $kernel->delay_set("watcher",1,$host,$user,$pwd);
- # $kernel->yield('watcher');
- }
- sub get_ip
- {
- my $host = hostname();
- my $name = (gethostbyname($host))[0];
- return inet_ntoa(scalar(gethostbyname($name || 'localhost')));
- }
作者: wfnh 发布时间: 2010-09-02
问题已经解决了,但是我还是不懂,可能和整个的框架有关··一定要事件才行·····可惜·没什么中文的资料··杯具啊····
下面我是改写的代码,仅供解决办法···代码粗糙~~见谅见谅~~
ps:觉得用poe写的东西···很清晰···只要写callback就行了····易读性很强(我的可能不怎么样),非常好的东西···POE··
复制代码
下面我是改写的代码,仅供解决办法···代码粗糙~~见谅见谅~~
ps:觉得用poe写的东西···很清晰···只要写callback就行了····易读性很强(我的可能不怎么样),非常好的东西···POE··
- use strict;
- use Net::Ftp;
- use Socket;
- use Sys::Hostname;
- use POE;
- $|++;
- my $host = $ARGV[0]||get_ip();
- my $user = $ARGV[1]||'ftpadmin';
- my $pwd = $ARGV[2]||'adminftp1';
- create POE::Session(
- inline_states =>
- {_start => \&start,
- _stop => sub{print "exit\n";},
- watcher => \&ftp_watch,
- restart => \&restart,
- success => \&disconnect
- },
- );
- POE::Kernel->run;
- exit(0);
- sub start
- {
- $_[KERNEL]->yield('watcher',$host,$user,$pwd);
- $_[HEAP]->{max_try} = 10;
- $_[HEAP]->{try_time} =0;
- print <<READ
- 说明:本程序将监控FTP服务,当FTP服务不能提供正常工作时,程序将尝试重启FTP服务
-
- READ
- }
-
- sub ftp_watch
- {
- my ($kernel,$heap,$host,$user,$pwd) = @_[KERNEL,HEAP,ARG0..ARG2];
- my $ftp=Net::FTP->new($host,Debug=>0,Timeout=>120,Passive => 0);
- $ftp ? $kernel->yield('success',$ftp) : $kernel->yield('restart');
- }
- sub get_ip
- {
- my $host = hostname();
- my $name = (gethostbyname($host))[0];
- return inet_ntoa(scalar(gethostbyname($name || 'localhost')));
- }
-
- sub restart
- {
- # `net stop Serv-U`;
- # sleep 1;
- # my $return = `net start Serv-U`;
- # print "state:\n$return\n";
- print "restart\n";
- ++$_[HEAP]->{try_time} > $_[HEAP]->{max_try} ? $_[KERNEL]->call('_stop') : $_[KERNEL]->delay_set("watcher",1,$host,$user,$pwd);
- print $_[HEAP]->{try_time},"\t",$_[HEAP]->{max_try},"\n";
-
- }
-
- sub disconnect
- {
- $_[ARG0]->quit();
- $_[HEAP]->{try_time} = 0;
- print "\rftp server is normal";
- $_[KERNEL]->delay_set("watcher",1,$host,$user,$pwd);
- }
-
-
作者: wfnh 发布时间: 2010-09-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28