0

我有一个我想从中运行的 Rails 运行器任务cron,但当然cron是运行root,因此环境设置不正确以使 RVM 正常工作。我已经尝试了很多东西,但到目前为止都没有奏效。crontab条目是:

*  0 * * * root cd /home/deploy/rails_apps/supercharger/current/ && /usr/local/rvm/wrappers/ruby-1.9.3-p484/ruby bundle exec rails runner -e production "Charger.start"

为超长的命令行道歉。无论如何,我从中得到的错误是:

ruby: No such file or directory -- bundle (LoadError)

所以在 RVM 目录中找到了 ruby​​,但同样,环境是错误的。

我试过rvm alias delete [alias_name]了,它似乎做了一些事情,但是如果我知道它生成的包装器去了哪里,那该死的。我看了看,/usr/local/rvm/wrappers没有看到我指定的名字。

这似乎是一个常见问题——常见到whenevergem 存在。我正在使用的 runner 命令非常简单,将这个条目放入 and go 似乎是一个灌篮crontab,但不是那么多......

对此的任何帮助表示赞赏。

4

2 回答 2

1

您可以以不同于 root 的用户身份运行 cron。即使在您的示例中,任务也以

*  0 * * * root cd

root是运行命令的用户。您可以使用 编辑它crontab -e -u username

如果您坚持以 root 身份运行 cron 任务或以其他用户身份运行由于某种原因无法正常工作,您可以使用su. 例如:

su - username -c "bundle exec rails runner -e production "Charger.start"
于 2014-10-05T19:21:08.153 回答
1

听起来您可以使用第三方工具将您的 Rails 应用程序绑定到 cron:无论何时。你已经知道了,但似乎你从未尝试过。这个 gem 包含一个简单的 DSL,可以在您的情况下应用,例如:

every :day # Or specify another period, or something else, see README
  runner "Charger.start"
end

whenever一旦你定义了你的日程安排,你需要使用命令行实用程序将它写入 crontab 。请参阅README文件whenever --help详细信息。

它不应该在运行时造成任何性能影响,因为它所做的只是在部署或显式命令时转换为 crontab 格式。这不是必需的,一旦服务器运行,一切都cron在这之后完成。

如果你不想要额外的 gem,你不妨检查它发出什么命令来执行你的任务。尽管如此,添加cron任务的自动化方式更易于维护和部署。当然,在 crontab 中添加一行更容易——只为你和这一次。然后它开始变得重复和累人,更不用说其他潜在开发人员的困惑,他们必须在自己的机器上设置类似的东西。

于 2014-10-05T19:42:58.063 回答