代码之家  ›  专栏  ›  技术社区  ›  Trevor Steen

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

  •  1
  • Trevor Steen  · 技术社区  · 9 年前

    我正在构建一个Slack机器人,它与一些内部工具集成。

    Trying to start redis and resque scheduler within a rake task

    但是有没有更干净的方法呢?

    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\u bot有时会挂起。要重新启动,我必须杀死那个进程并重新启动它。我更希望有一种简单的方法来重新启动所有的东西,只是为了保持干净,本质上是对过程进行后台监控。在一个完美的世界里,我可以将这一切作为一个系统服务来运行,并从 service bot start /etc/init.d

    1 回复  |  直到 9 年前
        1
  •  1
  •   Medvedu    9 年前

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

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

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

    $ 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

    推荐文章