重启ruby程序

时间:2010-01-10 09:42:17

标签: ruby

我正在写一个IRC机器人,我的目的是让“!reboot”重新启动机器人。我已经让它从一个频道分离并打破了运行循环,但我无法让它重新运行该文件。

它需要启动一个新进程并加载该文件的新版本,以便可以加载任何新命令等和配置更改。

3 个答案:

答案 0 :(得分:5)

只需运行Kernel.exec函数,该函数将使用新函数替换正在运行的进程。

exec函数的优点是,当两个不同的机器人同时运行时,没有时间跨度。这是一个过程,在exec调用之后,它立即被替换为新过程。

答案 1 :(得分:2)

当需要重启时,您可以使用系统命令system("ruby /path/to/my/bot.rb")重新运行机器人。

如果没有充分理由,我不会做这件事。以这种方式构建机器人似乎是一个更好的解决方案,它可以随时重新加载新命令和配置更改,因此根本不需要重新启动。

答案 2 :(得分:0)

有几种可能性,一种是简单的,一种可能不那么可能。

首先,您可以将irb执行放入循环命令/ shell脚本文件中吗?然后你的重启变成一个简单的exit,脚本会跳回来再次运行你的Ruby文件。如果要使用其他文件,则可以在退出之前将名称(或路径)放入环境变量中。

作为替代方案,您可以使用重写的脚本作为参数调用eval吗?这是Giles Bowkett Archaeopteryx中使用的技术之一 - 更改代码并保存它,然后(在本例中)定时循环选取新代码并使用eval运行它。