2017-06-29 54 views
0

我試圖在Capistrano完成部署後立即重新啓動Python,gunicorn和spark,但我得到了下面的錯誤。但是,當我試圖通過SSH在服務器上執行這些命令,那麼它工作正常。啓動Python,Spark和Gunicorn時出現問題

功能在deploy.rb:

desc 'Restart django' 
    task :restart_django do 
     on roles(:django), in: :sequence, wait: 5 do 
     within "#{fetch(:deploy_to)}/current/" do 
      execute "cd #{fetch(:deploy_to)}/current/ && source bin/activate " 
      execute "sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python && pkill -f gunicorn && pkill -f spark" 
#execute " cd /home/ubuntu/code/spark-2.1.0-bin-hadoop2.7/sbin/ && ./start-master.sh && ./start-slave.sh spark://127.0.0.1:7077;" 
      #execute "sleep 20" 
      #execute "cd /home/ubuntu/code/ && nohup gunicorn example.wsgi:application --name example --workers 4 &" 
     end 
     end 
    end 

部署輸出:

cap dev deploy:restart_django 
Using airbrussh format. 
Verbose output is being written to log/capistrano.log. 
00:00 deploy:restart_django 
     01 cd /home/ubuntu/code/ && source bin/activate 
    ✔ 01 [email protected] 2.109s 
     02 sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark 
(Backtrace restricted to imported tasks) 
cap aborted! 
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark exit status: 1 
sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark stdout: Stopping supervisor: supervisord. 
sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark stderr: Nothing written 

SSHKit::Command::Failed: sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark exit status: 1 
sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark stdout: Stopping supervisor: supervisord. 
sudo /etc/init.d/supervisor stop && sudo fuser -k 8000/tcp && pkill -f python gunicorn spark stderr: Nothing written 

Tasks: TOP => deploy:restart_django 
(See full trace by running task with --trace) 

回答

0

Capistrano的缺省調用沒有登錄,非交互式殼。但是,使用登錄shell並不是一個好的選擇,但是我可以通過調用Capistrano下的登錄shell並使用下面的命令來解決問題。

execute "bash --login -c 'pkill -f spark'", raise_on_non_zero_exit: false