我正在构建一个与一些内部工具集成的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
启动/停止,或者只有一个进程来启动/终止。
答案 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。