每当gem cronjob没有从/ etc / environment加载PATH时

时间:2016-09-26 15:59:19

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

在我的rails poroject中,我使用随时随地管理cron-jobs。他们就是这个:

* * * * * /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

P.S。这是我的/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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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