提供されている init.d スクリプト ( sidekiq github repoの init.d スクリプト) を使用していますが、システム全体に RVM がインストールされた ubuntu システムを使用しています。
ログに不平がなく、実際には何も開始されずに、アプリディレクトリに移動してコマンドを発行する方法を理解できないようです。
質問: RVM を使用している場合、init.d スクリプトで sidekiq の起動コマンドをどのように記述すればよいですか? 私のユーザーはubuntuという名前です。現在、init.dスクリプトにこれがあります:
START_CMD="$BUNDLE exec $SIDEKIQ"
# where bundle is /usr/local/rvm/gems/ruby-1.9.3-p385/bin/bundle
# and sidekiq is sidekiq
# I've also tried with the following args: -e $APP_ENV -P $PID_FILE -C $APP_CONFIG/sidekiq.yml -d -L $LOG_FILE"
RETVAL=0
start() {
status
if [ $? -eq 1 ]; then
[ `id -u` == '0' ] || (echo "$SIDEKIQ runs as root only .."; exit 5)
[ -d $APP_DIR ] || (echo "$APP_DIR not found!.. Exiting"; exit 6)
cd $APP_DIR
echo "Starting $SIDEKIQ message processor .. "
echo "in dir `pwd`"
su - ubuntu -c "$START_CMD >> $LOG_FILE 2>&1 &"
RETVAL=$?
#Sleeping for 8 seconds for process to be precisely visible in process table - See status ()
sleep 8
[ $RETVAL -eq 0 ] && touch $LOCK_FILE
return $RETVAL
else
echo "$SIDEKIQ message processor is already running .. "
fi
}
私の sidekiq.log には、次のエラーが表示されますCould not locate Gemfile
。ただし、作業ディレクトリを出力すると、このコマンドが実行された時点で、echo pwd によると、間違いなくアプリの現在のディレクトリにいます。
su - ubuntu -c [ここにコマンド] を実行すると、次のエラーが表示されます。
/usr/bin/env: ruby_noexec_wrapper: No such file or directory
私の解決策は、プロセスを手動で開始することです。手動で app ディレクトリに cd し、次のコマンドを発行すると:
bundle exec sidekiq -d -L log/sidekiq.log -P tmp/pids/sidekiq.pid
物事は計画通りに進み、その後
sudo /etc/init.d/sidekiq status
物事が順調に進んでいることを教えてくれます。
また、sudo /etc/init.d/sidekiq stop および status は期待どおりに機能します。