2017-08-28 91 views
1

我正在构建一个与某些内部工具集成的Slack Bot。如何启动Redis,Ruby脚本和Resque worker作为一个守护进程

我看到这样的解决方案: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

我想你正在寻找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 

可用here工头详细的文档。

+0

正是我所需要的,与'领班开始'完美合作,我可以在屏幕上运行它,使其持久。当我尝试执行系统服务部分时,Redis不启动,其他部分执行。我在某处读到Redis系列中的' - '可能存在问题。 –