Ruby 使用 Ruby 自动重启服务的脚本

lb563 · 2013年04月25日 · 最后由 lb563 回复于 2013年05月22日 · 4070 次阅读

我有一自己写的服务需要在后台一直运行。现在是每次更新代码后都需要手动来重启太麻烦了

我找过使用 shell 环境中的 nohup 命令也使用过 ruby 的 daemons Gem 包但是都不理想。

我遇到的问题:

1:使用 Daemons 时重启服务后 cpu 直接到 100%,但是当我杀掉 daemons 重启的服务然后手动重启 cpu 就正常了。

2:用 ruby 脚本去调用 Nohup 命令 nohup command > myout.file 2>&1 &启服务 cup 到 100%

3: 使用过 shell 命令后加 "&" ,这样做的结果会使服务占用 cpu 到 100% 而且一直有输出

为什么我使用上面的方法重启服务都会使 cpu 的利用到 100%? 是不是我漏掉什么地方了?

麻烦大牛们帮忙看看问题出在什么地方吧?

试试 daemon-spawn 这个 gem

要不 ruby 只执行一个 shell 脚本? 复杂的逻辑和写法都放到 shell 脚本中去?

#1 楼 @jasl 试了下。启动服务后 cpu 跑到 100% 而且杀不掉这个进程 pid. 会不会是我服务有问题? 如果说我服务有问题,那我手动重启服务 cpu 跑的就正常。这个有点奇怪了

#2 楼 @hhuai 其实也没有很多逻辑,就是 cd 到 bin 目录执行一下 bin 文件。

能说一下是什么服务吗?一般来说,服务软件应该提供优雅重启的机制,比如用信号量

#3 楼 @lb563 你可能需要把环境和服务的情况描述的更具体一些

@fsword @jasl 是 c++ 写的服务,编译后生成 bin 文件,运行时执行这个 bin 文件

#7 楼 @lb563 如果你能实现信号量重启机制的话...就没有问题了...

#8 楼 @jasl #5 楼 @fsword #2 楼 @hhuai 最后使用了 god http://godrb.com/ 这个 gem 来实现服务的自动重启功能,

需要 登录 后方可回复, 如果你还没有账号请 注册新账号