只有从cronjob运行时,Ruby脚本才能找到phantomjs(ubuntu 14.04)

时间:2016-06-15 20:24:33

标签: ruby cron phantomjs ubuntu-14.04 poltergeist

我不知道为什么会这样,但我的服务器上安装了phantomjs

$which phantomjs
/usr/local/bin/phantomjs

我正在从crontab运行脚本:

0 */5 * * * /home/roy/.rbenv/shims/ruby /home/roy/SCRIPT/lib/SCRIPT.rb

如果我只是从命令行运行确切的命令,它将运行。

但如果它从cronjob运行,我得到:

/home/roy/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/cliver-0.3.2/lib/cliver/dependency.rb:143:in 
`raise_not_found!': Could not find an executable ["phantomjs"] on your path. (Cliver::Dependency::NotFound)

我已经在可能的重复Could not find phantomjs中看到了这一点,但即使安装了它,它似乎仍然没有在cron中运行。

有没有办法检查这可能出错的地方?仅仅为了背景,它已经工作了大约一个月,但是当我尝试从phantomjs 2.0.0更新到phantomjs 2.1.1时就崩溃了。

1 个答案:

答案 0 :(得分:1)

问题

当运行可执行文件$PATH时,它是一个目录数组,搜索该可执行文件。

例如,如果您的$PATH包含/bin,则可以phantomjs运行,/bin会搜索/bin/phantomjs

从Cron运行脚本时,$PATH包含的目录与从bash运行该脚本时的目录不同。

解决方案

要在不依赖$PATH的情况下运行可执行文件,只需使用其绝对路径即可。绝对路径以/开头。

  1. which phantomjs中运行bash。这将显示phantomjs的绝对路径。
  2. 在您的脚本中用其绝对路径替换phantomjs