我正在为学校项目编写一个ruby bootstrapping脚本,这个引导过程的一部分是启动一些后台进程(编写并正常运行).我想做的是:
`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
Run Code Online (Sandbox Code Playgroud)
但是,第一次调用时会阻塞执行daemon1.我已经看过一个Process.spawn方法的引用,但这似乎是一个1.9+的功能,我只限于Ruby 1.8.
我也尝试从不同的线程执行这些守护进程,但我希望我的引导脚本能够退出.
那么我怎样才能启动这些后台进程,以便我的引导脚本不会阻塞并且可以退出(但仍然让守护进程在后台运行)?
对于我的RubyOnRails-App,我必须在Capistrano部署结束时开始后台工作.为此,我在deploy.rb中尝试了以下内容:
run "nohup #{current_path}/script/runner -e production 'Scheduler.start' &", :pty => true
Run Code Online (Sandbox Code Playgroud)
有时它可以工作,但大多数情况下它不会启动过程(=未在ps -aux中列出).并且没有错误消息.没有nohup.out,不在主目录中,也不在rails app目录中.
我尝试在scheduler.rb而不是nohup中使用trap('SIGHUP','IGNORE'),但结果是一样的.
让它工作的唯一方法是删除":pty => true"并在"cap deploy"结束时执行手动Ctrl-C.但我不喜欢这个......
还有其他机会调用此Scheduler.start吗?或者获取更多错误消息?
我在服务器上使用Rails 2.3.2,Capistrano 2.5.8,Ubuntu Hardy