我正在写一个IRC机器人,我的目的是让“!reboot”重新启动机器人。我已经让它从一个频道分离并打破了运行循环,但我无法让它重新运行该文件。
它需要启动一个新进程并加载该文件的新版本,以便可以加载任何新命令等和配置更改。
答案 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
运行它。