Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 当使用crontab执行时,Ruby脚本提取错误的值_Linux_Ruby_Crontab - Fatal编程技术网

Linux 当使用crontab执行时,Ruby脚本提取错误的值

Linux 当使用crontab执行时,Ruby脚本提取错误的值,linux,ruby,crontab,Linux,Ruby,Crontab,操作系统:亚马逊Linux 我有一个连接到站点的Ruby脚本,然后它通过XPath请求搜索div块,其中是我要解析的统计计数器 然后,它将来自站点的数字与数据库中的当前值进行比较,如果该数字增加,它会向我发送一封电子邮件 问题是,然后我从它工作的当前目录运行脚本 脚本解析包含值的文本块 我用正则表达式提取值,如下(/\d/) 但是当它被crontab执行时,它会得到一些奇怪的值,比如 …041704300440043504304304304304304304404370430430204300

操作系统:亚马逊Linux

我有一个连接到站点的Ruby脚本,然后它通过XPath请求搜索div块,其中是我要解析的统计计数器

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

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

  • 脚本解析包含值的文本块
  • 我用正则表达式提取值,如下(/\d/)
  • 但是当它被crontab执行时,它会得到一些奇怪的值,比如 …0417043004400435043043043043043043044043704304302043004420435043043504303904470437043704370437043504404350440435043504370435043504350437043504350437043004480430430…

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

    网站中的文本是俄语,用Windows-1251编码。 也许这有问题。
    我在.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),这可能是一个环境问题,可能包括