【发布时间】:2015-10-07 13:07:56
【问题描述】:
我有一个使用 system() 调用 shell 命令的 perl 脚本,该命令使用 ruby_executable_hooks。
当我从命令行运行这个脚本时,它可以完美执行。
但是,当它从 cron 作业运行时,我收到以下两个错误之一: A)如果我不 chdir() 即。工作目录是 /home/foobar
/usr/bin/env: ruby_executable_hooks: No such file or directory
B) 如果我 chdir("[doc root]/cgi-bin")
/usr/lib/ruby/site_ruby/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem twurl (>= 0) (Gem::LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:214:in `activate'
from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
from /home/foobar/.rvm/gems/ruby-1.9.3-p551/bin/twurl:22
from /home/foobar/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/gems/1.9.1/bin/ruby_executable_hooks:15
从 cron 运行时找不到某些文件的原因可能是什么?
【问题讨论】:
-
发布后我注意到 /usr/lib/ruby/site_ruby/1.8 被引用,而 twurl 在 1.9.3 下运行,而 1.9.3 是默认版本。我对 ruby 了解得不够多,不知道这是否是个问题或如何解决它。
-
你是说
$ENV{PATH}包含ruby_executable_hooks的路径吗?那么这可能是一个权限问题。 -
cron执行环境通常不是人们想象的那样。如果您运行的脚本仅是id; pwd; env | sort(a)交互方式和(b)在 cron 下会发生什么?你看到意义的不同了吗? -
谢谢 Carl、ikegami 和 pilcrow。命令行的输出太长,无法在此处显示。我将缩短它并将其放在单独的评论中。这是 cron 作业的输出: HOME=/home/username LANG=C LOGNAME=username MAILTO=cron@servername.com PATH=/usr/bin:/bin PWD=/home/username SHELL=/bin/bash SHLVL =1 USER=用户名_=/usr/bin/env
-
这是一个非常截断的命令行输出。我已经删除了不相关的东西和路径,这是在下一条评论中。 CLASSPATH=.:/usr/local/jdk/lib/classes.zip GEM_HOME=/home/username/.rvm/gems/ruby-1.9.3-p551 GEM_PATH=/home/username/.rvm/gems/ruby-1.9 .3-p551:/home/username/.rvm/gems/ruby-1.9.3-p551@global IRBRC=/home/username/.rvm/rubies/ruby-1.9.3-p551/.irbrc MY_RUBY_HOME= /home/username/.rvm/rubies/ruby-1.9.3-p551 RUBY_VERSION=ruby-1.9.3-p551 rvm_bin_path=/home/username/.rvm/bin rvm_path=/home/username/.rvm rvm_prefix=/home /username rvm_version=1.26.11(最新)