2015-11-19 83 views
0

我有以下命令,我的init.d獨角獸腳本運行。 該命令沒有問題的作品在終端手動,但拒絕 工作在我的init.d /麒麟文件init.d腳本不會運行執行命令,但命令在手工運行時終止

cd /var/www/myapp/current && (RAILS_ENV=production BUNDLE_GEMFILE=/var/www/myapp/current/Gemfile /usr/bin/env bundle exec unicorn -c /var/www/myapp/current/config/unicorn/production.rb -E deployment -D) 

這裏是init.d中文件

#!/bin/sh 
### BEGIN INIT INFO 
# Provides: unicorn 
# Required-Start: postgresql nginx 
# Required-Stop: 
# Should-Start: 
# Should-Stop: 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: Start and stop unicorn 
# Description: UNICORN 
### END INIT INFO 
set -e 
APP_ROOT=/var/www/myapp/current 
PID=$APP_ROOT/tmp/pids/unicorn.pid 
RAILS_ENV=production 
BUNDLE_GEMFILE=$APP_ROOT/Gemfile 
CMD="cd $APP_ROOT && (RAILS_ENV=$RAILS_ENV BUNDLE_GEMFILE=$APP_ROOT/Gemfile /usr/bin/env bundle exec unicorn -c $APP_ROOT/config/unicorn/$RAILS_ENV.rb -E deployment -D)" 

action="$1" 
set -u 

cd $APP_ROOT || exit 1 

sig() { 
     test -s "$PID" && kill -$1 `cat $PID` 
} 

case $action in 
start) 
     sig 0 && echo >&2 "Already running" && exit 0 
     $CMD 
     ;; 
stop) 
     sig QUIT && exit 0 
     echo >&2 "Not running" 
     ;; 
esac 
+0

「拒絕工作」是指什麼? –

+1

你正在把你的命令放在'CMD'中,但是你永遠不會使用它。無論如何,你可能不應該使用變量;請參閱http://mywiki.wooledge.org/BashFAQ/050 – tripleee

回答

1

抽象的CMD變量爲功能解決了這個問題。正如由tripleee的資源共享所間接建議的那樣。

#!/bin/sh 
### BEGIN INIT INFO 
# Provides: unicorn 
# Required-Start: postgresql nginx 
# Required-Stop: 
# Should-Start: 
# Should-Stop: 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: Start and stop unicorn 
# Description: UNICORN 
### END INIT INFO 
set -e 
APP_ROOT=/var/www/myapp/current 
PID=$APP_ROOT/tmp/pids/unicorn.pid 
RAILS_ENV=production 
BUNDLE_GEMFILE=$APP_ROOT/Gemfile 
action="$1" 
set -u 

cd $APP_ROOT || exit 1 

run(){ 
     cd $APP_ROOT && (RAILS_ENV=$RAILS_ENV BUNDLE_GEMFILE=$APP_ROOT/Gemfile /usr/bin/env bundle exec unicorn -c $APP_ROOT/config/unicorn/$RAILS_ENV.rb -E deployment -D) 
} 

sig() { 
     test -s "$PID" && kill -$1 `cat $PID` 
} 

case $action in 
start) 
     sig 0 && echo >&2 "Already running" && exit 0 
     run 
     ;; 
stop) 
     sig QUIT && exit 0 
     echo >&2 "Not running" 
     ;; 
esac 
+1

我不明白爲什麼你想要或需要在子shell中運行'env'。您可以刪除'cd'後面的圓括號。 – tripleee

相關問題