gpt4 book ai didi

windows - 独立的 ruby​​ 脚本(windows 和 mac)可以重新加载并重新启动吗?

转载 作者:可可西里 更新时间:2023-11-01 10:30:08 25 4
gpt4 key购买 nike

我有一个 master-worker 架构,其中 worker 的数量每周都在增长。我不能再期望通过 ssh 或远程控制台进入每台机器来杀死工作人员,进行源代码控制同步,然后重新启动。我希望能够让主人在网络上发出一条消息,告诉每台机器同步并重新启动。

这就是我遇到障碍的地方。如果我使用任何健全的平台,我可以这样做:

exec('ruby', __FILE__)

...完成。但是,我做了以下测试:

p Process.pid
sleep 1
exec('ruby', __FILE__)

...在 Windows 上,每次调用 exec 都会得到一个 ruby​​ 实例。直到我在有问题的窗口上按 ^C ,他们都没有死。在我尝试过的每个平台上,它每次都在执行文件的新版本,我已经通过在测试进行时对测试脚本进行简单的编辑来验证这一点。

我打印 pid 的原因是为了仔细检查我看到的行为。在 Windows 上,每次执行我都会得到一个不同的 pid - 这是我所期望的,考虑到我在任务管理器中看到每次运行都有一个新进程。 mac 运行正常:每个系统调用的 pid 都是相同的,我已经用 dtrace 验证了每次运行都会触发对 execve 系统调用的调用。

所以,简而言之,有没有办法让 Windows ruby​​ 脚本重新开始执行,以便它运行在执行过程中发生变化的任何代码(包括自身)?请注意,这不是 Rails 应用程序,但它确实使用了 activerecord。

最佳答案

在尝试了多种解决方案(包括 Byron Whitlock 提交的解决方案,最终让我走上了通往满意结局的道路)之后,我决定:

IO.popen("start cmd /C ruby.exe #{$0} #{ARGV.join(' ')}")
sleep 5

我发现,如果我在 popen 后根本不 sleep ,只是退出,则 spawn 会经常(>50% 的时间)失败。这显然不是跨平台的,所以为了在 mac 上有相同的行为:

IO.popen("xterm -e \"ruby blah blah blah\"&")

关于windows - 独立的 ruby​​ 脚本(windows 和 mac)可以重新加载并重新启动吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com