如何启动Redis,Ruby脚本和Resque worker作为一个守护进程

时间:2017-08-28 12:03:45

标签: ruby resque

我正在构建一个与一些内部工具集成的Slack Bot。

我看到了这个解决方案:Trying to start redis and resque scheduler within a rake task

但有更清洁的方法吗?

目前我在另一个ruby脚本start.rb中启动所有内容,基本上就是这样:

system('nohup redis-server &')
system('nohup bundle exec ruby slack_bot.rb &')
system("nohup bundle exec rake resque:workers QUEUE=* COUNT=#{$workers} &")

通常这很好,但由于某种原因,slack_bot有时会挂起。要重新启动,我必须杀死那个进程并重新启动它。我宁愿有一个简单的方法来重新启动所有东西只是为了干净,基本上守护进程。在一个完美的世界中,我可以将这一切作为系统服务运行,并使用service bot start/etc/init.d启动/停止,或者只有一个进程来启动/终止。

1 个答案:

答案 0 :(得分:1)

我猜你正在寻找foreman宝石。使用foreman,您可以使用Procfile声明运行应用程序所需的各种进程。

所以,解决办法可以是:

1个宝石安装工头

2在项目目录中创建Procfile。放入文件:

redis: redis-server  
slack_bot: bundle exec ruby slack_bot.rb  
workers: bundle exec rake resque:workers QUEUE=* COUNT=*

2.5现在,您可以通过领班一起使用所有内容:

$ foreman start  

3也可以将工头导出到系统服务。

$ sudo foreman export --app app_name --user your_user_name systemd /etc/systemd/system/  

3.5启动服务

$ systemctl start app_name.target

Foreman详细文档here