capistrano task
namespace :service do
desc "start daemontools (svscan/supervise/svscanboot)"
task :start, :roles => :app do
sudo "svscanboot&"
end
end
Now this doesn't work: the svscanboot process simply doesn't run.
This helped me find sleep
: https://github.com/defunkt/resque/issues/284
other sources pointed me to nohup
, redirection
, and pty => true
, so I tried all these.
run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &" # NO
run "(svscanboot&) && sleep 1" # NO
run "(nohup svscanboot&) && sleep 1" # YES!
Now, could anyone explain to me why i need the sleep statement and what difference does nohup make? For the record all the above run equally well if run from user shell, problem is only in the context of capistrano.
thanks
My simple solution would be make svscanboot.sh file at remote server with whatever code you want to run. In your case
In cap rake task add this
this works well for me.
Try this
I think
nohup
just launches the process in background, so you don't need to explicitly set the last &.Did you try
run "nohup svscanboot >/tmp/svscanboot.log 2>&1"
(without the ending & to send it to the background).
That should work and remain running when your current capistrano session is closed.
Try forking the process as explained here: Spawn a background process in Ruby
You should be able to do something like this:
As well, checkout this: Starting background tasks with Capistrano
I'd like to share my solution which also works when executing multiple commands. I tried many other variants found online, including the "sleep N" hack.