我如何启动 Redis,一个 Ruby 脚本和 Resque worker 作为一个守护进程
How do I start Redis, a Ruby script, and Resque worker as one daemon
我正在构建一个与一些内部工具集成的 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 有时会挂起。要重新启动,我必须终止那个进程并重新启动它。我宁愿有一种简单的方法来一起重新启动所有东西只是为了干净,本质上是守护进程。在一个完美的世界中,我可以 运行 这一切作为系统服务和 start/stop 与 service bot start
或 /etc/init.d
或者有一个进程到 start/kill.
我猜您正在寻找 foreman gem。使用工头,您可以使用 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。
我正在构建一个与一些内部工具集成的 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 有时会挂起。要重新启动,我必须终止那个进程并重新启动它。我宁愿有一种简单的方法来一起重新启动所有东西只是为了干净,本质上是守护进程。在一个完美的世界中,我可以 运行 这一切作为系统服务和 start/stop 与 service bot start
或 /etc/init.d
或者有一个进程到 start/kill.
我猜您正在寻找 foreman gem。使用工头,您可以使用 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。