我有几个需要在后台运行的 rake 任务。我正在使用 rbenv
管理我的 ruby 版本,supervisord
运行任务,bundle
确保我使用正确的 gems 版本。我的每个任务的 supervisord 配置如下所示:
[program:data-importer]
command=/home/ubuntu/.rbenv/bin/rbenv exec bundle exec rake import:data
environment=RAILS_ENV=production,PATH=/home/ubuntu/.rbenv/shims:%(ENV_PATH)s,PRODUCTION=true
directory=/home/ubuntu/app/current
user=ubuntu
stdout_logfile=/var/log/app/%(program_name)s-out.log
stderr_logfile=/var/log/app/%(program_name)s-err.log
autostart=true
我也在使用
consul
监控我的基础设施,我正在使用 consul 检查以确保这些脚本正在运行。检查调用一个非常简单的 bash 脚本,如下所示:#!/bin/bash
if ps -ef | grep [i]mport:data | grep -v running; then
echo "data importer running"
exit 0
else
echo "data importer not running"
exit 2
fi
这些脚本一直运行良好,直到几天前这些检查开始失败。问题是当我运行
ps -ef
,列出的进程不包含 import:data
了。它现在显示了这一点:ubuntu 30450 ... /home/ubuntu/.rbenv/versions/2.3.1/bin/rake
机器上没有真正改变,只有 Ruby 版本。我们用的是2.2.2,上周五我们升级到了2.3.1。这就是为什么我认为这是一个 bundle 程序问题,因为我们在 ruby 升级后安装了更新的版本。
直到周日我们才发现问题,但可能是我们之前没有发现。
谁能帮我这个?我已经被困了一段时间了:(
最佳答案
要在 ps -ef 中获得所需的输出,您必须在 rake 调用周围加上引号:
bundle exec 'rake import:data'
关于ruby - 运行 bundle exec 时,如何让 bundler 在 "ps aux"中显示完整的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335155/