如何运行显示一些信息的ruby shell脚本,然后请求输入并进入后台?

时间:2015-06-24 17:25:44

标签: ruby ubuntu background-process

我有一个我想在后台运行的ruby shell脚本。 但是,在进入后台之前,我需要请求用户输入。

有可能吗?如何实现?

提前致谢!

2 个答案:

答案 0 :(得分:0)

这绝对是可能的,我的理解是非必要的功能被推送到后台工作,以减轻用户体验的一些处理负担。我现在正在沿着这些方向做某事但未被用户激活。

首先我要问一些问题:该过程是否实时提供用户反馈(对于后台工作不是一个好的用例)?一个人可以同时运行多少个工作?它将如何干扰或操作生产工人(如独角兽产卵)?如果后台作业失败会发生什么?他们处理高优先级信息吗?这些问题引导我弄清楚应该利用如何/何时监控的内容,以及我是否希望它由用户输入和启动时触发等。

无论如何,我建议使用:http://sidekiq.org/,它似乎是许多开发者中的赢家。我可能会通过接受控制器中的参数并在控制器方法中实例化worker类(如sidekiqs文档中所示)来实现它。那个worker类可能会像Runner一样运行你的ruby shell脚本吗? Runner in Ruby on Rails

您甚至可以从模型中触发它们(例如在用户创建后通过电子邮件发送)或者您有什么。

另一个经常使用的宝石是https://github.com/collectiveidea/delayed_job。在部署到生产环境时,我个人使用https://github.com/javan/whenever激活rake任务(作为cron作业)。多数民众赞成似乎与你无关。

对于这种广泛性质的未来问题,您应该提供有关工作要求的更多信息,例如回答第二段中的一些问题。你在用什么?参数是否会触发不同的脚本?您使用的是哪种导轨版本?它是用于生产还是开发?

答案 1 :(得分:0)

这是一个简单的例子:

def do_stuff(input)
  puts "Input received: #{input}"
  sleep 10
end

print "Enter input value: "
input = gets
pid = fork { do_stuff(input) }
puts "test.rb started, pid: #{pid}"
Process.detach pid

请注意使用fork启动新进程,并detach允许子进程在主进程退出时继续运行。

某些平台(Windows)不支持fork