QA@IT
«質問へ戻る

タイトルにRedisの名前を追加しました。

159
タイトル
RubyでDeamonを実行するには?
RubyでRedisをDeamonとして起動するには?

RubyでRedisをDeamonとして起動するには?

現在、rails3.2と、ResqueというGemを使って開発をしています。

今回の疑問点は、RedisをRubyからどうやってDeamonとして起動するのかわからないのです。

詳細を書いていきます。

このResqueというgemは内部で、RedisというKVSを使っています。
なのであらかじめRedisを実行しておく必要性があります。
このRedisの実行コマンドは

redis-server /usr/local/etc/redis.conf

です。
このコマンドをうつと、画面に色々ログが表示された後に、そのまま止まってしまいます。
止まるというのは、ターミナルのタブが出力専用になり、こちらの入力をCTRL+Cしか受け付けなくなるということです。

なのでRedisをDeamonとして動かす必要性があると考えました。

この場合は恐らくこれでDeamon化できます。

nohup redis-server /usr/local/etc/redis.conf &

しかしこれを止めるためにはpidを調べてkillしなくてはいけませんでした。
なので私としてはできれば、rakeタスクでrake redis:startrake redis:stopの様に実現したいと考えました。

そこでrakeファイルに、nohup redis-server /usr/local/etc/redis.conf &を実行してくれるような処理を書きたいのですが、うまくできません。

どのようにすれば、実現できるでしょうか?

以下に、悪い例として色々試行錯誤した例を書きます。

Shellライブラリ(?)を使ってやる方法

require "shell"

namespace :redis do
    desc "TODO"
    task :start => :environment do
        Shell.def_system_command "nohup", "nohup"
        Shell.def_system_command "redis_server", "redis-server"
        sh = Shell.new
        sh.transact {
            nohup{
                sh.redis_server("/usr/local/etc/redis.conf")
            }
        }
    end
end

これはうまくいきませんでした。恐らく文法的なエラーだとは思うのですが、色々試行錯誤中です。

Process.daemonを使ってやる方法

Process.daemon

`redis-server /usr/local/etc/redis.conf`

これはとりあえず直接このrubyファイルを実行しました(rakeからではなく)。
しかしこのプログラムを実行するとこのRuby自体のDeamonと、redis-serverのDeamon?が2つでき、rubyのDeamonを切っても、redisのDeamon?はきれませんでした。

現在、rails3.2と、ResqueというGemを使って開発をしています。

今回の疑問点は、RedisをRubyからどうやってDeamonとして起動するのかわからないのです。

詳細を書いていきます。

このResqueというgemは内部で、RedisというKVSを使っています。
なのであらかじめRedisを実行しておく必要性があります。
このRedisの実行コマンドは

```sh
redis-server /usr/local/etc/redis.conf
```
です。
このコマンドをうつと、画面に色々ログが表示された後に、そのまま止まってしまいます。
止まるというのは、ターミナルのタブが出力専用になり、こちらの入力をCTRL+Cしか受け付けなくなるということです。

なのでRedisをDeamonとして動かす必要性があると考えました。

この場合は恐らくこれでDeamon化できます。

```sh
nohup redis-server /usr/local/etc/redis.conf &
```

しかしこれを止めるためにはpidを調べてkillしなくてはいけませんでした。
なので私としてはできれば、rakeタスクで```rake redis:start```や```rake redis:stop```の様に実現したいと考えました。

そこでrakeファイルに、```nohup redis-server /usr/local/etc/redis.conf &```を実行してくれるような処理を書きたいのですが、うまくできません。

どのようにすれば、実現できるでしょうか?


## 以下に、悪い例として色々試行錯誤した例を書きます。

### Shellライブラリ(?)を使ってやる方法

```ruby
require "shell"

namespace :redis do
  	desc "TODO"
  	task :start => :environment do
  		Shell.def_system_command "nohup", "nohup"
  		Shell.def_system_command "redis_server", "redis-server"
		sh = Shell.new
		sh.transact {
			nohup{
				sh.redis_server("/usr/local/etc/redis.conf")
			}
		}
  	end
end
```

これはうまくいきませんでした。恐らく文法的なエラーだとは思うのですが、色々試行錯誤中です。

### Process.daemonを使ってやる方法

```ruby
Process.daemon

`redis-server /usr/local/etc/redis.conf`
```

これはとりあえず直接このrubyファイルを実行しました(rakeからではなく)。
しかしこのプログラムを実行するとこのRuby自体のDeamonと、redis-serverのDeamon?が2つでき、rubyのDeamonを切っても、redisのDeamon?はきれませんでした。

質問を投稿

RubyでDeamonを実行するには?

現在、rails3.2と、ResqueというGemを使って開発をしています。

今回の疑問点は、RedisをRubyからどうやってDeamonとして起動するのかわからないのです。

詳細を書いていきます。

このResqueというgemは内部で、RedisというKVSを使っています。
なのであらかじめRedisを実行しておく必要性があります。
このRedisの実行コマンドは

redis-server /usr/local/etc/redis.conf

です。
このコマンドをうつと、画面に色々ログが表示された後に、そのまま止まってしまいます。
止まるというのは、ターミナルのタブが出力専用になり、こちらの入力をCTRL+Cしか受け付けなくなるということです。

なのでRedisをDeamonとして動かす必要性があると考えました。

この場合は恐らくこれでDeamon化できます。

nohup redis-server /usr/local/etc/redis.conf &

しかしこれを止めるためにはpidを調べてkillしなくてはいけませんでした。
なので私としてはできれば、rakeタスクでrake redis:startrake redis:stopの様に実現したいと考えました。

そこでrakeファイルに、nohup redis-server /usr/local/etc/redis.conf &を実行してくれるような処理を書きたいのですが、うまくできません。

どのようにすれば、実現できるでしょうか?

以下に、悪い例として色々試行錯誤した例を書きます。

Shellライブラリ(?)を使ってやる方法

require "shell"

namespace :redis do
    desc "TODO"
    task :start => :environment do
        Shell.def_system_command "nohup", "nohup"
        Shell.def_system_command "redis_server", "redis-server"
        sh = Shell.new
        sh.transact {
            nohup{
                sh.redis_server("/usr/local/etc/redis.conf")
            }
        }
    end
end

これはうまくいきませんでした。恐らく文法的なエラーだとは思うのですが、色々試行錯誤中です。

Process.daemonを使ってやる方法

Process.daemon

`redis-server /usr/local/etc/redis.conf`

これはとりあえず直接このrubyファイルを実行しました(rakeからではなく)。
しかしこのプログラムを実行するとこのRuby自体のDeamonと、redis-serverのDeamon?が2つでき、rubyのDeamonを切っても、redisのDeamon?はきれませんでした。

現在、rails3.2と、ResqueというGemを使って開発をしています。

今回の疑問点は、RedisをRubyからどうやってDeamonとして起動するのかわからないのです。

詳細を書いていきます。

このResqueというgemは内部で、RedisというKVSを使っています。
なのであらかじめRedisを実行しておく必要性があります。
このRedisの実行コマンドは

```sh
redis-server /usr/local/etc/redis.conf
```
です。
このコマンドをうつと、画面に色々ログが表示された後に、そのまま止まってしまいます。
止まるというのは、ターミナルのタブが出力専用になり、こちらの入力をCTRL+Cしか受け付けなくなるということです。

なのでRedisをDeamonとして動かす必要性があると考えました。

この場合は恐らくこれでDeamon化できます。

```sh
nohup redis-server /usr/local/etc/redis.conf &
```

しかしこれを止めるためにはpidを調べてkillしなくてはいけませんでした。
なので私としてはできれば、rakeタスクで```rake redis:start```や```rake redis:stop```の様に実現したいと考えました。

そこでrakeファイルに、```nohup redis-server /usr/local/etc/redis.conf &```を実行してくれるような処理を書きたいのですが、うまくできません。

どのようにすれば、実現できるでしょうか?


## 以下に、悪い例として色々試行錯誤した例を書きます。

### Shellライブラリ(?)を使ってやる方法

```ruby
require "shell"

namespace :redis do
  	desc "TODO"
  	task :start => :environment do
  		Shell.def_system_command "nohup", "nohup"
  		Shell.def_system_command "redis_server", "redis-server"
		sh = Shell.new
		sh.transact {
			nohup{
				sh.redis_server("/usr/local/etc/redis.conf")
			}
		}
  	end
end
```

これはうまくいきませんでした。恐らく文法的なエラーだとは思うのですが、色々試行錯誤中です。

### Process.daemonを使ってやる方法

```ruby
Process.daemon

`redis-server /usr/local/etc/redis.conf`
```

これはとりあえず直接このrubyファイルを実行しました(rakeからではなく)。
しかしこのプログラムを実行するとこのRuby自体のDeamonと、redis-serverのDeamon?が2つでき、rubyのDeamonを切っても、redisのDeamon?はきれませんでした。