我正在尝试在ruby脚本中启动unicorn_rails,并在脚本中执行许多命令后,当脚本到达以下行时
%x[bash -ic "bash <(. ~/.bashrc); cd /home/www-data/rails_app; bundle exec unicorn_rails -p 8000 -E production -c /home/www-data/rails_app/config/unicorn.rb -D"]
脚本停止,生成以下输出
[1]+ Stopped ./setup_rails.rb
并返回Linux提示符。如果我输入“fg”,脚本就会运行,脚本停止的行会被执行,而unicorn会作为守护进程启动。
如果我在一个单独的脚本中运行该行,脚本就会完成而不会停止。
UPDATE_1 -
我源.bashrc因为我在脚本的前面安装了rvm并让它在正确的环境下运行我有以下内容:
%x[echo "[[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\"" >> .bashrc]
%x[bash -ic "bash <(. ~/.bashrc); rvm install ruby-1.9.2-p290; rvm 1.9.2-p290 --default;"]
所以如果我想运行正确版本的rvm,ruby和bundle我需要源.bashrc
结束UPDATE_1
有没有人知道什么可能导致ruby脚本停止,就好像按下了control-Z一样?
答案 0 :(得分:1)
不确定为什么它会停止,但我的一般经验法则是永远不要在脚本中找到我的.bashrc - 这可能是你问题的根源,但是我不能确定它没有看到它的内容。您应该能够将脚本更改为:
$ vi setup_rails.sh
#!/usr/bin/bash
# EDIT from comments below
# expanding from a one liner to a better script...
$RVM_PATH=$HOME/.rvm/scripts
# install 1.9.2-p290 unless it's installed
$RVM_PATH/rvm info 1.9.2-p290 2&>1 >/dev/null || $RVM_SH install 1.9.2-p290
# run startup command inside rvm shell
$RVM_PATH/rvm-shell 1.9.2-p290 -c "cd /home/www-data/rails_app && bundle exec unicorn_rails -p 8000 -E production -c /home/www-data/rails_app/config/unicorn.rb -D"
这应该会给你相同的结果。