如何通过 web 服务,触发服务器端的脚本,让脚本到后台运行? 并获得脚本的运行状态,即是否成功启动等信息~
#1 楼 @yedingding 可能自己没表达清楚,就是通过 rails 的 web 服务来启动服务器端的某个脚本,是长时间处理的 job,而且有多个。 可以在 render 之前通过 system 'nohup ruby xxx.rb &'来启动吗? 还有个问题就是,不想让用户重复这样的操作,如果脚本已经在运行,如何知道?
首先一个请求到后端,用 JS 或者直接提交表单。
后端脚本运行,把运行状态写入一个文本文件。
然后前端 JS 按一定间隔不断请求服务器,读取运行状态文件并写入 DOM。
运行结束后有一个特殊记录。前端读到这个记录停止请求。
归根结底是记录 pid
return unless Process.getpgid(File.read('my.pid')) rescue nil
pid = Process.fork { sleep 100 }
File.write('my.pid', pid)
使用 god 这个 gem 吧。我用过了,效果很好。 参考: http://godrb.com, http://siwei.me/blog/posts/first-experience-of-god , http://siwei.me/blog/posts/god-advanced-config-file