2

redisサーバーを制御できるcapistranoスクリプトがあります。問題のタスクは次のとおりです。

  %w[start stop restart].each do |cmd|
    desc "#{cmd}s redis-server"
    task cmd, :roles => :app do
      run "#{sudo} /etc/init.d/redis-server #{cmd}"
    end
  end

When I run this (deploying to a local vagrant VM) it says it's starts successfully:

    > cap local redis:start


    triggering load callbacks
  * executing `local'
Deploying branch master
    triggering start callbacks for `redis:start'
  * executing `multistage:ensure'
  * executing `redis:start'
  * executing "sudo -p 'sudo password: ' /etc/init.d/redis-server start"
    servers: ["192.168.33.10"]
Password: 
    [192.168.33.10] executing command
 ** [out :: 192.168.33.10] Starting redis-server:
 ** [out :: 192.168.33.10] redis-server.
    command finished in 2054ms

ただし、SSHで接続するとredis-serverが実行されません。手動で起動すると機能します。

> sudo /etc/init.d/redis-server start

そして、上記と同じ出力が得られますが、今回だけプロセスが実行され続けます。

でログを見る/var/log/redis/redis.logと、ファイルは空です。

私が間違っていることについて何か考えはありますか?私はこのような他のサービス(nginx、unicorn、mysqlなど)を起動し、それらは正常に機能しています。

4

1 に答える 1

4

ssh接続が終了すると、redisプロセスは終了すると思います。

スクリプトにnohupを追加してみてください。

run "#{sudo} nohup /etc/init.d/redis-server #{cmd}"
于 2012-11-07T19:15:25.720 に答える