Monit无法使用Rails 4应用程序启动Resque-Scheduler进程

时间:2019-07-16 07:12:10

标签: ruby-on-rails resque monit amazon-linux resque-scheduler

我正在将在Amazon Linux 1 AMI上运行的应用程序移至在Amazon Linux 2 AMI上运行的应用程序。我使用monit跟踪应用程序触发的所有进程,例如resque-schedulerresque workershttpgod等。但是我注意到resque-scheduler进程没有不能在后台模式下启动。实际上,我看到它出现了1-2秒,然后死了。以下是我使用的版本: resque-scheduler gem version: 4.2.0 Monit version: 5.25.1 Rails version: 4.2.11

在升级到AL2 ami的过程中,我们已从5.2.5升级到monit版本5.25.1。 这里要注意的一件事是,当我在rails3而不是rails4中运行应用程序时,该过程在后台启动。 尝试了以下操作:

  • 从rails控制台检查了在rails3和rails4中加载的宝石列表,并且两个列表相同

  • 检查了在Rails环境中加载和不加载monit的环境变量列表。他们似乎不是问题。

  • 在下面指定的resque-scheduler配置中,当我删除BACKGROUND=yes时,它就会出现并且monit可以跟踪它。

我的resque-scheduler进程的监视配置如下:

check process resque_scheduler
  with pidfile /media/ephemeral0/pids/workers/resque_scheduler.pid
  start program = "/bin/bash -c 'export HOME=/home/ec2-user && /usr/lib/test-app/resque_scheduler_dev_d start'" as uid "ec2-user" and gid "ec2-user" with timeout 120 seconds
  stop program = "/bin/bash -c 'export HOME=/home/ec2-user && /usr/lib/test-app/resque_scheduler_dev_d stop'" as uid "ec2-user" and gid "ec2-user" with timeout 60 seconds
  if 5 restarts within 5 cycles then timeout

start方法如下:

WORKERS_PID_DIR=/media/ephemeral0/pids/workers
LOGFILE=/media/ephemeral0/logs/rails_log/scheduler.log
pid_file="${WORKERS_PID_DIR}/resque_scheduler.pid"
start() {
  worker_name=$1
  pid_file="${WORKERS_PID_DIR}/resque_scheduler.pid"
  cd /usr/lib/test-app && RAILS_NEXT=1 /usr/bin/bundle exec /usr/bin/rake environment resque:scheduler RAILS_ENV=development VERBOSE=1 PIDFILE=${pid_file} LOGFILE=${LOGFILE} BACKGROUND=yes
}

此处RAILS_NEXT = 1用于在rails4而不是rails3上运行应用程序

当我不带监控地手动运行上述start()方法时,尽管rake进程没有退出(不确定原因),但该进程运行良好且未引发任何错误日志。 因此,如果它是a,我将无法缩小范围:

  • resque-scheduler gem问题,因为我在手动运行过程时未发现错误日志

  • monit v5.25.1问题,因为删除Background = yes后,monit可以跟踪它。 monit v5.2.1与此标志一起也可以正常工作。

  • rails4问题,与AL1 ami一样,它也可以与rails4正常工作

0 个答案:

没有答案