【问题标题】:bundle exec rake doesn't run in cronbundle exec rake 不在 cron 中运行
【发布时间】:2014-07-01 08:00:33
【问题描述】:

我做了一些研究,但所有与 cron 和 bundle exec 相关的内容都没有涵盖我遇到的问题,如果已经讨论过,请再次原谅。

我正在运行 Ubuntu 13.10,并且有一个 Ruby On Rails 应用程序,其中几乎没有需要每隔几分钟在 Cron 上运行的 rake 任务。

我运行了一个每当 gem 的帮助下,这个语法

every 3.minutes do
  rake 'update_balance'
end

在 crontab 文件中转换为这一行

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent'

当我完全复制这一行时

/bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent'

并在它的控制台中运行,它运行得非常好,并按预期更新了数据库中的几条记录。

但是当设置为 cron 时,我可以看到它在 /var/log/syslog 文件中运行,但没有真正执行。

May 13 13:06:01 sandbox2 CRON[9656]: (root) CMD (/bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent')
May 13 13:06:01 sandbox2 CRON[9655]: (CRON) info (No MTA installed, discarding output)
May 13 13:09:01 sandbox2 CRON[9789]: (root) CMD (/bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent')

即使我将 &>/tmp/mycommand.log 添加到 crontab 命令,每次下一次启动 cron 命令都会完全截断这个文件,但是,如果我手动启动它,它会很好地工作并让我得到这个输出。

2014-05-13T11:11:25Z 10292 TID-2asbo INFO: Sidekiq client with redis options  {:url=>"redis://127.0.0.1"}
Sent task for updating 2 users

非常感谢您对此问题的任何帮助。 谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby ubuntu cron


    【解决方案1】:

    由于 cron 以不同的用户身份运行,我以前遇到过类似的问题。特别是 rake,我必须使用 rake 的完整路径,因为 cron 用户的 PATH 中没有正确的文件夹。

    所以,我的 rake 任务的 cron 行如下所示:

    30 8 * * 1 cd /ebs/www/apps/myproject/www && /usr/local/bin/rake mailer:send_weekly_expiring_users_reminder RAILS_ENV=production
    

    【讨论】:

    • 如果您希望他们适用于所有任务,也可以set environment variables in the crontab itself
    • 听起来更明智:)
    • 谢谢,它成功了。稍后我会查看环境变量。这就是我的 crontab 行现在的样子。 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /bin/bash -l - c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production /usr/local/bin/bundle exec /usr/bin/rake update_balance --silent'
    • 这对我也很有帮助,遇到相同问题的每个人都应该阅读:stackoverflow.com/questions/2388087/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2019-10-12
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多