我有一个IRC bot以Perl语言编写,使用过时的,无证的和不喜欢的Net :: IRC库。尽管如此,它运行得很好......除非连接断开。似乎图书馆在实施重新连接支持之前不再更新。显而易见的解决方案是重写整个机器人以利用库的后继者,但不幸的是需要重写整个机器人。如何为Net :: IRC机器人设置互联网连接检测器?
所以我感兴趣的解决方法。
当前的设置我已经是supervisord配置每当进程意外退出重启机器人,和cron作业杀每当互联网连接丢失的过程。
这不起作用,因为我似乎无法正常工作,因为机器人似乎无法检测到因互联网中断而丢失了连接。它会继续愉快地继续运行,无所事事,假装仍然连接到IRC服务器。
我有以下代码为主体的程序循环:
while (1) {
$irc->do_one_loop;
# can add stuff here
}
我想它做的是:
一)检测,互联网已经下降,
B)等到互联网已经涨了,
C)退出脚本,使supervisord可以复活它。
是否有这样做的任何其他更好的方法?
编辑:在脚本方法不起作用,原因不明。我正在尝试制作一个单独的脚本来解决它。
#!/usr/bin/perl
use Net::Ping::External;
while (1) {
while (Net::Ping::External::ping(host => "8.8.8.8")) { sleep 5; }
sleep 5 until Net::Ping::External::ping(host => "8.8.8.8");
system("sudo kill `pgrep -f 'perl painbot.pl'`");
}
似乎的确do_one_loop挂起 - 我怎么使用'警报“悬空它?这不是我的职能之一,它来自图书馆。 –
我试过这个,就像http://pastie.org/8396134一样,但没有采取。也许我可以把它放在一个单独的脚本中,而不是通过系统调用来杀死僵尸程序? –
听起来像一个计划 – AKHolland