Как запустить несколько работников sidekiq, используя init.d - PullRequest
0 голосов
/ 20 ноября 2018

Я использую Amazon Linux 1. У меня 2 приложения на одном сервере EC2.1 - это rails 3, а другой - rails 5. Я пытаюсь запустить sidekiq из обоих приложений, используя init.d, но запускается только одно из них.

Ниже приведен пример моего скрипта в / etc / init.d / sidekiq_myapp.Я просто изменил APP_DIR другого скрипта и использовал разные имена для sidekiq (параметр -q):

#!/bin/sh

### BEGIN INIT INFO
# Provides:          sidekiq
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts and stops sidekiq
# Description:       starts and stops sidekiq
### END INIT INFO

# You will need to modify these
APP="myapp"
AS_USER="root"
APP_DIR="/var/www/myapp"

APP_CONFIG="${APP_DIR}/config"
LOG_FILE="/opt/nginx/logs/error.log"
LOCK_FILE="$APP_DIR/tmp/${APP}-sidekiq-lock"
PID_FILE="$APP_DIR/tmp/pids/sidekiq.pid"
GEMFILE="$APP_DIR/Gemfile"
SIDEKIQ="sidekiq"
APP_ENV="production"
BUNDLE="bundle"

START_CMD="$BUNDLE exec $SIDEKIQ -q critical,5 -q default,2 -q low -d -L $LOG_FILE -e $APP_ENV -P $PID_FILE"
CMD="cd ${APP_DIR}; ${START_CMD} >> ${LOG_FILE} 2>&1 &"

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 .. "

    su -c "$CMD" - $AS_USER

    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


}

stop() {

  status
  if [ $? -eq 0 ]; then
    echo "Stopping sidekiq message processor .."
    SIG="INT"
    kill -$SIG `cat $PID_FILE`
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f $LOCK_FILE
    return $RETVAL
  else
    echo "Sidekiq message processor is stopped already .."
  fi

}

status() {

  ps -ef | grep 'sidekiq [0-9]*.[0-9]*.[0-9]*' | grep -v grep
  return $?
}


case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status

        if [ $? -eq 0 ]; then
             echo "$SIDEKIQ message processor is running .."
             RETVAL=0
         else
             echo "$SIDEKIQ message processor is stopped .."
             RETVAL=1
         fi
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 0
        ;;
esac
exit $RETVAL

Я могу убедиться, что работает один из рельсов 3.Один из рельсов 5 нет.Мне все еще нужно вручную запустить bundle exec sidekiq на рельсах 5, чтобы он заработал.

# ps -ef | grep sidekiq
2672     1  1 13:37 ?        00:00:09 sidekiq 3.3.0 squadzip [0 of 25 busy]                                                                                                                                                    
7048  6954  0 13:51 pts/1    00:00:00 grep --color=auto sidekiq

Я бы хотел придерживаться systemV.Какие-нибудь мысли?Оба будут работать, если я вручную запущу пакет exec sidekiq, это означает, что мои настройки rails / sidekiq в порядке.Моя проблема в том, как запустить их обоих.

...