Ruby on Rails - Rake 任务无法通过 Cron 运行

发布于 2024-09-06 13:44:27 字数 385 浏览 5 评论 0原文

当我手动执行 rake 任务时,它工作正常,但是当我在 Cron 中输入相同的命令时,没有任何反应:

cd /path/to/my/rails/app && rake daily_import

Cron 日志表明该命令已发出:

CMD (cd /path/to/my/rails/app && rake daily_import)

rake 任务记录错误和成功消息,但没有任何内容记录到日志中,什么也没做。但是,如果我使用同一用户复制并粘贴 CMD 文本,则 Cron 正在运行该命令,一切正常。

我假设在 Cron 中运行任务应该与我自己输入任务相同,这是正确的吗?

When I execute a rake task manually, it works fine but when I put the same command in Cron nothing happens:

cd /path/to/my/rails/app && rake daily_import

The Cron log indicates that the command was issues:

CMD (cd /path/to/my/rails/app && rake daily_import)

The rake task logs error and success messages, but nothing is recorded to the log, nothing is done at all. However if I copy and paste the text of the CMD with the same user Cron is running the command in everything works fine.

I'm assuming that running a task in Cron should be the same as typing it in myself, is this correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

遥远的她 2024-09-13 13:44:27

这件事对我有用

* * * * * /bin/bash -l -c 'cd /path/to/my/rails/app && RAILS_ENV=production bundle exec rake daily_import'

你需要在任务之前指定 /bin/bash -l -c 。

This thing worked for me

* * * * * /bin/bash -l -c 'cd /path/to/my/rails/app && RAILS_ENV=production bundle exec rake daily_import'

You need to specify /bin/bash -l -c before your task.

小瓶盖 2024-09-13 13:44:27

查找 cron 守护程序可能已发送给运行 cron 作业的用户的邮件。如果 cron 作业在 stderr 或 stdout 上生成输出,则 cron 守护程序会将其通过电子邮件发送给 cron 作业的所有者。如果出现问题(可能是由于 PATH 问题,如上面 Rob 建议的那样),您可能会在来自 cron 守护程序的电子邮件中看到有用的错误消息。

Look for mail that the cron daemon might have sent to the user under which the cron job is running. If a cron job produces output on stderr or stdout, the cron daemon will email that to the owner of the cron job. If something is going wrong (possibly because of a PATH issue, like Rob suggests above), you might see a helpful error message in an email from the cron daemon.

浪漫人生路 2024-09-13 13:44:27

如果有人使用 Rails 3.2<>4.0 查看此内容,我必须在我的 crontab 中使用此内容:

0 * * * * BUNDLE_GEMFILE=/path/to/rails/Gemfile /path/to/bin/bundle exec rake -f /path/to/rails/Rakefile db:hive_enrich RAILS_ENV=production > /var/log/rake_tasks.log 2>&1 &

In case anyone is looking at this with Rails 3.2<>4.0, I had to use this in my crontab:

0 * * * * BUNDLE_GEMFILE=/path/to/rails/Gemfile /path/to/bin/bundle exec rake -f /path/to/rails/Rakefile db:hive_enrich RAILS_ENV=production > /var/log/rake_tasks.log 2>&1 &
风尘浪孓 2024-09-13 13:44:27

以下解决方案适用于我的 Rails 3 和 rvm 集成。我只是执行一个 bash 脚本:

0 * * * * rvmuser /bin/bash -l -c '/path/to/my/bashscript > /tmp/script.log'

如果没有 /bin/bash -l -c 部分,这似乎不起作用。

然后,根据 rvm 文档,我的 bash 脚本如下:

#!/usr/bin/env bash

RAILS_ENV=production

source /var/www/rvmuser/.rvm/environments/ruby-1.9.3-p484

cd /path/to/my/rails_app

rake do:whatever

The following solution worked for me for Rails 3 and rvm integration. I simply execute a bash script:

0 * * * * rvmuser /bin/bash -l -c '/path/to/my/bashscript > /tmp/script.log'

This doesn't seem to work without the /bin/bash -l -c part.

Then, my bash script is as follows, according to the rvm documentation:

#!/usr/bin/env bash

RAILS_ENV=production

source /var/www/rvmuser/.rvm/environments/ruby-1.9.3-p484

cd /path/to/my/rails_app

rake do:whatever
金橙橙 2024-09-13 13:44:27

rake 是否在用于运行此 shell 的 cron 用户的路径中?

Is rake in the PATH of the cron user for running this shell?

煮酒 2024-09-13 13:44:27

我使用以下格式来运行 rake 任务,路径更加明确一些,

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production

我还喜欢将输出重定向到文件,以便我可以检查错误

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production > ~/daily_import.log 2>&1

I use the following format to run rake tasks, a little more explicit with the paths

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production

I also like to redirect output to a file so I can check the errors

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production > ~/daily_import.log 2>&1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文