【问题标题】:Ruby script can't find phantomjs only when run from cronjob (ubuntu 14.04)只有从 cronjob (ubuntu 14.04) 运行时,Ruby 脚本才能找到 phantomjs
【发布时间】:2016-06-15 20:24:33
【问题描述】:

我不确定这是为什么,但我的服务器上安装了 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 时中断了。

【问题讨论】:

  • 可能是您在 cron 作业中执行脚本时使用了不同的 PATH。您可以在脚本中尝试puts ENV["PATH"],看看是否有所不同。或者,您可以在 crob 作业中调用脚本时传递自定义路径。 PATH=$PATH:/something/custom ruby thescript.rb
  • 因为你使用的是 ubuntu——你可以在 /etc/environment 中设置你想要的 cron 作业可用的环境变量——这里有一个关于它的讨论——askubuntu.com/questions/700107/…

标签: ruby cron phantomjs ubuntu-14.04 poltergeist


【解决方案1】:

问题

在运行可执行文件$PATH(一个目录数组)时,会搜索该可执行文件。

例如,如果您的$PATH 包含/bin,您可以运行phantomjs 并且/bin 将被搜索/bin/phantomjs

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

解决方案

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

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

【讨论】:

  • 你说得对,我想我可以这样做,但我想知道是否有办法不必把它放在脚本中,因为它以前就是这样(想不知道为什么它只是当时有效,而不是现在)。
  • @roy 有。你可以像这样调用你的脚本bash -l -c '/path/to/script'
  • 或者您可以像其他人建议的那样在 crontab 中设置路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2014-08-04
  • 2016-09-07
  • 2018-01-18
  • 2019-03-03
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多