我正在将在Amazon Linux 1 AMI上运行的应用程序移至在Amazon Linux 2 AMI上运行的应用程序。我使用monit跟踪应用程序触发的所有进程,例如resque-scheduler
,resque workers
,http
,god
等。但是我注意到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正常工作