【发布时间】:2013-10-18 15:24:06
【问题描述】:
我有一个用 Perl 编写的 IRC 机器人,使用已弃用、未记录和不受欢迎的 Net::IRC 库。尽管如此,它运行得很好......除非连接断开。在他们实现对重新连接的支持之前,库似乎停止更新。显而易见的解决方案是重写整个机器人以利用库的继任者,但不幸的是,这需要重写整个机器人。
所以我对解决方法很感兴趣。
我当前的设置是 supervisord 配置为在进程意外退出时重新启动机器人,以及一个 cron 作业在 Internet 连接丢失时终止进程。
这并不像我希望的那样工作,因为机器人似乎无法检测到它由于互联网中断而失去连接。它会愉快地继续运行,什么也不做,假装仍然连接到 IRC 服务器。
我有以下代码作为主程序循环:
while (1) {
$irc->do_one_loop;
# can add stuff here
}
我想做的是:
a) 检测到互联网已关闭,
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'`");
}
【问题讨论】: