2017-08-28 13 views
1

私は内部ツールを統合したSlack Botを構築しています。Redis、Rubyスクリプト、Resqueワーカーをデーモンとして起動するには

私は、このソリューションを参照してください。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は時々ハングアップします。再起動するには、その1つのプロセスを終了して再起動する必要があります。基本的にプロセスをデーモン化するだけで、すべてを一緒に再起動してクリーンにする簡単な方法が好きです。完璧な世界では、私はこれをすべてシステムサービスとして実行し、service bot startまたは/etc/init.dで開始/停止するか、開始/終了する1つのプロセスを持つことができます。

答えて

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を起動しhere利用できるサービス

$ systemctl start app_name.target 

フォアマン詳細なドキュメント。

+0

私が必要としていたことは、「foreman start」で完璧に動作し、画面で実行して永続化させることができます。私がシステムサービスの部分をやろうとすると、Redisは起動せず、他の部分も起動します。私はRedisの行に「 - 」の問題があるかもしれないと読んでいます。 –

関連する問題