1

操作系统:亚马逊 Linux

我有一个连接到站点的 Ruby 脚本,然后它使用 XPath 请求搜索div块,我要解析的统计计数器在哪里。

然后它将来自站点的数字与数据库中的当前值进行比较,如果数字增加,它会向我发送一封电子邮件。

问题是,然后我从它工作的当前目录运行脚本。

  1. 该脚本解析包含值的文本块。
  2. 我用这样的正则表达式提取值 (/\d/) ...

But when it the script executes by crontab it gets some strange value like ...041704300440043504330438044104420440043804400430432043004304304304304304404370430432043004420435043043504390447043504400435043704320430044804430430...

我不知道如何调试它,因为当我手动运行脚本时它可以工作,但是当由 crontab 执行时会失败并出现奇怪的值。

该站点中的文本是俄语,使用Windows-1251编码。也许这有什么问题。我# encoding: utf-8在 .rb 文件中设置了 , 。

4

3 回答 3

1

这可能是环境问题,可能包括错误的路径等。您可以将命令行中的 ENV 与 crontab 启动时的环境进行比较。

尝试:

ruby -rpp -e 'pp ENV' > /tmp/crontab_env.out

从 crontab,然后:

ruby -rpp -e 'pp ENV' > /tmp/cmd_env.out

从命令行,然后:

vimdiff /tmp/*env.out

或使用常规编辑器。

于 2013-01-18T04:17:14.143 回答
0

cron 作业的问题通常是由错误的环境引起的。该脚本可能取决于在您启动交互式 shell(通过 或类似方式)时设置的环境变量~/.profile~/.bashrc而不是在您的程序直接启动时(通过 cron)设置的环境变量。

通过键入获取环境变量及其当前值的列表env。添加一个简单运行的 cron 作业env。比较输出并消除,直到找到罪魁祸首。

我想说LANG和朋友是一个很好的起点。通过键入获取与语言和编码相关的环境变量列表locale

于 2013-01-17T23:31:15.190 回答
0

如果您使用的是 RVM,请注意它通常仅适用于交互式 shell。RVM 手册中有一整节专门讨论了这个主题:RVM: Ruby Version Manager - Using Cron with RVM

这可能只是使用了错误的 Ruby 版本(包括其 Gems)的问题。尝试删除脚本中的 hashbang 行,并在 crontab 中这样调用它:

1 0  * * * /usr/local/rvm/bin/ruby-1.9.3-p362 /path/to/script.rb

这应该确保使用 Ruby 二进制文件加载了正确的环境。

如果实际的问题是 RVM 甚至不能用于非交互式脚本,你还可以更进一步,做你的 shell 在加载 RVM 时所做的事情——向右滚动,这是一条大线:

1 0 * * * /bin/bash -l -c 'source "$HOME/.rvm/scripts/rvm" && rvm use 1.9.3-p362 && ruby /path/to/script.rb
于 2013-01-17T22:07:53.827 回答