【问题标题】:Whenever gem cronjob not loading PATH from /etc/environment每当 gem cronjob 不从 /etc/environment 加载 PATH
【发布时间】:2017-02-04 01:33:20
【问题描述】:

在我的 Rails 项目中,我正在使用when gem 来管理 cron 作业。其中有一个:

* * * * * /bin/bash -l -c 'cd /home/myhome/analytics && RAILS_ENV=development /bundle exec rake my_rake_job'

但由于错误/bin/bash: bundle: command not found 无法正常工作

当我将 env 从 cronjob 记录到文件中时,我可以看到我在 /etc/environment 中声明的两个环境变量(其他任何地方都没有),但 PATH 只是 PATH=/usr/bin:/bin 而不是PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" 取自我的 /etc/environment 文件。

我的意思是短期的肮脏解决方案是将 ruby​​ 二进制文件(ruby、rake、rails、bundle 等)符号链接到/usr/bin,但这不是一个很好的解决方案。为什么 cron 加载了一些变量而不是 PATH

附:这是我的/etc/pam.d/cron 文件

# The PAM configuration file for the cron daemon

@include common-auth

# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session       required   pam_env.so

# In addition, read system locale information
session       required   pam_env.so envfile=/etc/default/locale

@include common-account
@include common-session-noninteractive

# Sets up user limits, please define limits for cron tasks
# through /etc/security/limits.conf
session    required   pam_limits.so

【问题讨论】:

  • cron 不是以 root 用户身份运行的吗?你不能用* * * * * /bin/bash -l -c 'source /etc/environment && cd /home/myhome/analytics && RAILS_ENV=development /bundle exec rake my_rake_job'解决这个问题吗?
  • 这不太可行,因为该行是由只要 gem 自动生成的,我有几十个 cron 作业,所以在那里添加源意味着我必须为所有人以及当我通过任何时候添加另一个 cron 作业时,请继续这样做
  • 好的,看起来很合理。您至少可以检查用于运行 cron 命令的当前用户 ID 吗?
  • 它以我的用户身份运行,而不是 root
  • 好的,解决方法是:在cd /home/myhome/analytics 中创建一个bundle 脚本,该脚本正确设置路径并使用传递的参数调用真正的bundle 命令。哈克但肯定会工作,而无需更改您的 cron 命令。

标签: ruby-on-rails ruby linux bash cron


【解决方案1】:

使用adjustable job_type Whenever config paramscheduler.rb 中设置bundle 的准确路径:

job_type :rake, "cd :path && :environment_variable=:environment /usr/local/bin/bundle exec rake :task --silent :output"

【讨论】:

    【解决方案2】:

    最后将source /etc/environment 添加到.bash_profile(不是.bashrc)可确保cron 用户加载正确的变量并且它现在正在工作

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 2016-04-30
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2016-12-14
      相关资源
      最近更新 更多