首页 > 解决方案 > 通过monit重新启动delayed_job脚本会中断/usr/lib/ruby/2.3.0/rubygems/core_ext/kern

问题描述

所以我正在尝试使用 monit 来监控我的延迟作业流程。为了做到这一点,我写了这个

/home/deploy/sites/app.project.com.my/shared/delayed_job.monitrc

check process delayed_job_0
  with pidfile /home/deploy/sites/app.project.com.my/shared/pids/delayed_job.0.pid
  start program = "/home/deploy/sites/app.project.com.my/shared/delayed_job.sh start staging 0"
    as uid deploy and gid deploy
  stop program = "/bin/su - deploy -c '/home/deploy/sites/app.project.com.my/current/bin/delayed_job stop staging 0'"
  group delayed_job

我也写了这个脚本

/home/deploy/sites/app.project.com.my/shared/delayed_job.sh

#!/bin/bash
APP_NAME=app.project.com.my
APP_DIR=/home/deploy/sites
RAILS_ROOT=$APP_DIR/$APP_NAME/current
LOG_FILE=$APP_DIR/$APP_NAME/shared/delayed_job_monit.log

exec 2>&1


if [ "$3" ]; then
    RUNNER="$3"
else
    RUNNER=0
fi
echo "Runner: $RUNNER"


ENVIRONMENT=$2
echo "Env: $ENVIRONMENT"

PID_FILE=$RAILS_ROOT/tmp/pids/delayed_job.$RUNNER.pid
echo "Pid: $PID_FILE"

cd $RAILS_ROOT
echo "Received $1"

function stop {
  cd $RAILS_ROOT
  RAILS_ENV=$ENVIRONMENT /usr/bin/env bin/delayed_job stop -i $RUNNER
}

function start {
  if [ -f $PID_FILE ]; then 
    echo "Pid Found. Deleting PID FILE: $PID_FILE"
    rm -f $PID_FILE
  fi
  
  CMD=" /usr/bin/env RAILS_ENV=$ENVIRONMENT bin/delayed_job start -i $RUNNER"
  cd $RAILS_ROOT
  exec $CMD
}

case $1 in
  start)
    stop
    start
    ;;
  stop)
    stop
    ;;
  *)
    echo "WTF"
    ;;
esac

现在当在这个文件夹中时/home/deploy/sites/app.project.com.my/shared/,如果我像这样运行delayed_job.sh 脚本./delayed_job start staging 0。它工作正常,delayed_job 重新启动。

但是当我运行 monit 脚本时sudo monit start delayed_job_0,我得到一个错误/usr/lib/ruby/2.3.0/rubygems/core_ext/kern

目前不知道如何摆脱这个错误。

标签: rubybashshelldelayed-jobmonit

解决方案


推荐阅读