【问题标题】:How do I start Redis, a Ruby script, and Resque worker as one daemon如何将 Redis、Ruby 脚本和 Resque 工作者作为一个守护进程启动
【发布时间】:2017-08-28 21:28:36
【问题描述】:

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

【问题讨论】:

    标签: ruby resque


    【解决方案1】:

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

    所以,解决方案可以是:

    1 个 gem 安装工头

    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

    【讨论】:

    • 正是我所需要的,与foreman start 完美配合,我可以在屏幕上运行它以使其持久化。当我尝试做系统服务部分时,Redis 不启动,其他部分启动。我在某处读到 Redis 行中的“-”可能存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2016-09-19
    • 2015-03-21
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多