11

カピストラーノ タスク

namespace :service do
  desc "start daemontools (svscan/supervise/svscanboot)"
  task :start, :roles => :app do
    sudo "svscanboot&"
  end
end

これは機能しません: svscanboot プロセスは単に実行されません。これは私が見つけるのを助けましたsleep: https://github.com/defunkt/resque/issues/284nohup他の情報源が私に、redirection、 を 指摘したpty => trueので、これらすべてを試しました。

run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &"   # NO
run "(svscanboot&) && sleep 1"                       # NO
run "(nohup svscanboot&) && sleep 1"                 # YES!

さて、なぜスリープステートメントが必要なのか、nohup がどのような違いを生むのか、誰か説明してもらえますか? 記録として、ユーザーシェルから実行した場合、上記のすべてが同様にうまく実行されますが、問題は capistrano のコンテキストでのみ発生します。

ありがとう

4

5 に答える 5

1

ここで説明されているようにプロセスをフォークしてみてください: Rubyでバックグラウンドプロセスを生成します

あなたはこのようなことをすることができるはずです:

job1 = fork do
  run "svscanboot"
end

Process.detach(job1)

同様に、これをチェックしてください: Capistranoでバックグラウンドタスクを開始する

于 2012-12-20T22:54:37.327 に答える
0

バックグラウンドでプロセスを起動するだけだと思うnohup​​ので、最後の & を明示的に設定する必要はありません。

試しましたか

run "nohup svscanboot >/tmp/svscanboot.log 2>&1"

(エンディングなしで&バックグラウンドに送信します)。

現在のカピストラーノセッションが閉じられても、それは機能し、実行されたままになります。

于 2014-09-16T08:06:28.000 に答える