Linux 当使用crontab执行时,Ruby脚本提取错误的值
操作系统:亚马逊Linux 我有一个连接到站点的Ruby脚本,然后它通过XPath请求搜索div块,其中是我要解析的统计计数器 然后,它将来自站点的数字与数据库中的当前值进行比较,如果该数字增加,它会向我发送一封电子邮件 问题是,然后我从它工作的当前目录运行脚本Linux 当使用crontab执行时,Ruby脚本提取错误的值,linux,ruby,crontab,Linux,Ruby,Crontab,操作系统:亚马逊Linux 我有一个连接到站点的Ruby脚本,然后它通过XPath请求搜索div块,其中是我要解析的统计计数器 然后,它将来自站点的数字与数据库中的当前值进行比较,如果该数字增加,它会向我发送一封电子邮件 问题是,然后我从它工作的当前目录运行脚本 脚本解析包含值的文本块 我用正则表达式提取值,如下(/\d/) 但是当它被crontab执行时,它会得到一些奇怪的值,比如 …041704300440043504304304304304304304404370430430204300
我在.rb文件中设置了
#encoding:utf-8
。如果您使用的是RVM,请注意,它通常仅对交互式Shell可用。RVM手册中有一整节专门介绍此主题:
这可能仅仅是因为使用了错误的Ruby版本,包括它的Gems。尝试删除脚本中的hashbang行,并在crontab中这样调用它:
1 0 * * * /usr/local/rvm/bin/ruby-1.9.3-p362 /path/to/script.rb
这应该确保正确的环境中加载了Ruby二进制文件
如果实际的问题是RVM甚至不适用于非交互式脚本,那么您还可以更进一步,在shell加载RVM时执行shell所执行的操作向右滚动,这是一条大线:
1 0 * * * /bin/bash -l -c 'source "$HOME/.rvm/scripts/rvm" && rvm use 1.9.3-p362 && ruby /path/to/script.rb
如果您使用的是RVM,请注意,它通常仅对交互式Shell可用。RVM手册中有一整节专门介绍此主题: 这可能仅仅是因为使用了错误的Ruby版本,包括它的Gems。尝试删除脚本中的hashbang行,并在crontab中这样调用它:
1 0 * * * /usr/local/rvm/bin/ruby-1.9.3-p362 /path/to/script.rb
这应该确保正确的环境中加载了Ruby二进制文件
如果实际的问题是RVM甚至不适用于非交互式脚本,那么您还可以更进一步,在shell加载RVM时执行shell所执行的操作向右滚动,这是一条大线:
1 0 * * * /bin/bash -l -c 'source "$HOME/.rvm/scripts/rvm" && rvm use 1.9.3-p362 && ruby /path/to/script.rb
cron作业的问题通常是由错误的环境引起的。脚本可能取决于启动交互式shell时设置的环境变量(通过
~/.profile
、~/.bashrc
或类似方式),但不取决于由cron直接启动程序时设置的环境变量
通过键入env
获取环境变量及其当前值的列表。添加一个仅运行env
的cron作业。比较输出和芯片,直到你找到罪魁祸首
我想说,郎朗和朋友是一个很好的开始。通过键入
locale
获取语言和编码相关环境变量的列表cron作业的问题通常是由错误的环境引起的。脚本可能取决于启动交互式shell时设置的环境变量(通过~/.profile
、~/.bashrc
或类似方式),但不取决于由cron直接启动程序时设置的环境变量
通过键入env
获取环境变量及其当前值的列表。添加一个仅运行env
的cron作业。比较输出和芯片,直到你找到罪魁祸首
我想说,郎朗和朋友是一个很好的开始。通过键入
locale
获取语言和编码相关环境变量的列表,这可能是环境问题,可能包括错误路径等。您可以在通过crontab启动时从命令行将您的ENV与环境进行比较
尝试:
从crontab,然后:
ruby -rpp -e 'pp ENV' > /tmp/cmd_env.out
从命令行,然后:
vimdiff /tmp/*env.out
或者使用常规编辑器。这可能是环境问题,可能包括坏路径等。您可以在通过crontab启动时,从命令行将环境与环境进行比较 尝试: 从crontab,然后:
ruby -rpp -e 'pp ENV' > /tmp/cmd_env.out
从命令行,然后:
vimdiff /tmp/*env.out
或者使用常规编辑器。如果这不起作用,我不确定实际错误在哪里。你说你的脚本“得到一个像…”这样的值,但这是什么意思?这就是它在
new\u user\u count.scan
中从网站中提取的值吗?谢谢,但RVM似乎不是我的脚本无法工作的原因。当我从控制台手动启动它时,西里尔文字符串上的regexp可以工作。但是在crontab的邮件中,我有以下错误/home/ec2 user/ruby/login.rb:43:“扫描”:US-ASCII中的无效字节序列(ArgumentError),这可能是环境问题,可能包括错误路径,等等。尝试从命令行比较您的环境,然后从crontab启动时比较。从crontab尝试ruby-rpp-e'pp ENV'>/tmp/crontab_ENV.out
,然后从命令行尝试ruby-rpp-e'pp ENV'>/tmp/cmd_ENV.out
,然后从vimdiff/tmp/*ENV.out
或使用常规编辑器。我比较了不同的输出,当然,LANG变量丢失了。这正是我需要的。如果这不起作用,我不确定实际的错误在哪里。你说你的脚本“得到一个像…”这样的值,但这是什么意思?这就是它在new\u user\u count.scan
中从网站中提取的值吗?谢谢,但RVM似乎不是我的脚本无法工作的原因。当我从控制台手动启动它时,西里尔文字符串上的regexp可以工作。但是在来自crontab的邮件中,我有以下错误/home/ec2 user/ruby/login.rb:43:“扫描”:US-ASCII中的无效字节序列(ArgumentError),这可能是一个环境问题,可能包括