You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Monit监控delayed_job启动失败问题排查(RBENV环境)

搞定Monit启动delayed_job失败的问题

看起来你的Monit脚本里的启动命令写法有明显问题,这应该就是导致delayed_job.1启动失败的核心原因。我帮你拆解一下问题,再给出修复方案和排查步骤:

1. 启动命令的致命错误:环境变量与执行方式不对

你写的启动命令是:

start program = "/usr/bin RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 --queues=queue_1,queue_2 start --pid-dir=/home/ubuntu/project_x/shared/pids/"

这里有两个严重问题:

  • /usr/bin 是个目录,不是可执行命令,你把它放在开头完全没用,反而会让Monit找不到正确的执行入口。
  • Monit默认不会通过shell解析命令,所以直接写RAILS_ENV=production这种环境变量赋值,Monit根本识别不了,相当于你没设置环境变量就启动delayed_job,这肯定会出问题。

修正后的启动命令应该用/bin/bash -c把整个命令包起来,让shell来处理环境变量和命令逻辑:

start program = "/bin/bash -c 'RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 --queues=queue_1,queue_2 start --pid-dir=/home/ubuntu/project_x/shared/pids/'"

2. 先把stop命令补全并修正

你提供的stop命令被截断成了/home/ubuntu/project_x/current/bi...,应该是bin/delayed_job对吧?同样要按shell包裹的方式修正:

stop program = "/bin/bash -c 'RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 stop'"

(一般来说,停止delayed_job不需要指定pid-dir,它会自动读取启动时生成的pid文件,除非你有特殊配置才需要加上)

3. 后续排查步骤(如果修正后还是失败)

如果改完命令还是启动不了,试试这些方法定位问题:

  • 手动跑一遍启动命令:直接在服务器终端执行这条命令,看能不能正常启动,有没有报错:
    RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 --queues=queue_1,queue_2 start --pid-dir=/home/ubuntu/project_x/shared/pids/
    
    手动执行的报错信息是最直接的线索,比如权限不够、依赖没装、RAILS_ENV加载失败之类的。
  • 检查pid目录权限:确保/home/ubuntu/project_x/shared/pids/的所有者是Monit运行的用户(通常是root,或者你配置的用户),并且有读写权限。用ls -ld /home/ubuntu/project_x/shared/pids/就能查看,必要时用chown或chmod调整。
  • 看Monit的详细日志:Monit的日志一般在/var/log/monit.log,里面会有比“启动失败”更具体的错误,比如命令返回了非零状态、找不到文件之类的。
  • 给启动命令加日志输出:可以把启动时的输出写到日志文件里,方便排查:
    start program = "/bin/bash -c 'RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 --queues=queue_1,queue_2 start --pid-dir=/home/ubuntu/project_x/shared/pids/ >> /var/log/delayed_job_1_start.log 2>&1'"
    
    这样启动时的所有输出(包括错误)都会存在这个日志里,一看就明白哪里出问题。

修正后的完整Monit配置示例

check process delayed_job.1 with pidfile /home/ubuntu/project_x/shared/pids/delayed_job.1.pid
  start program = "/bin/bash -c 'RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 --queues=queue_1,queue_2 start --pid-dir=/home/ubuntu/project_x/shared/pids/'"
  stop program = "/bin/bash -c 'RAILS_ENV=production /home/ubuntu/project_x/current/bin/delayed_job -i 1 stop'"
  # 可选:加上自动重启规则
  if does not exist then restart

内容的提问来源于stack exchange,提问作者SSR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:08:12