从cron执行ruby脚本

6
我的脚本使用mysql,tiny_tds,fileutils和net/ftp。在运行于ruby 1.9.3时,当我在文件夹内运行它时,它完美地工作。
然而,当我将其添加到cron tab中时,tiny_tds经常失败。我不知道其他宝石是否失败,因为我无法通过以下错误:
"require': no such file to load -- tiny_tds (LoadError)"
来解决它。
我尝试从与crontab使用相同的shell中执行它,并且我得到了该错误。
整个脚本只有1个文件。
我是ruby的新手,所以我在设置环境方面的知识有限。
在文件头中,我有
    #!/usr/bin/ruby
    require "mysql"
    require "fileutils";
    require "tiny_tds"  
    require "net/ftp"

简而言之,我从mysql获取一个作业列表,将其与MsSQL进行比较,FTP文件并在完成作业后再次更新mysql。

而且我需要从cron运行这个操作。

经过一番研究,我尝试将gems设置为全局,但我认为可能没有成功。

非常感谢您的帮助!


你解决了这个问题吗? - Danny Bullis
2个回答

5
这是因为在crond执行代码时,命令行上设置的环境变量未被设置。通常会涉及到PATHLD_LIBRARY_PATH和登录时设置的别名。您可以通过使用crontab -e来查看crond的操作。
* * * * *  set > /tmp/setvals

创建上述条目,让它运行一段时间。然后返回到crontab -e并删除该新条目。

/tmp/setvals中的内容与在命令行上使用set命令给出的内容进行比较。然后您可以采取措施修改cron作业的环境。


2

RVM与cron协作的多种方式,如果您使用脚本,则最简单的方法是只使用RVM - 这意味着不要使用系统ruby #!/usr/bin/ruby - 只需在第一行中放置 #!/path/to/rvm/wrappers/ruby-1.9.3-p392/ruby

您可以使用别名来防止在脚本中硬编码一个ruby路径:

rvm alias create my_app 1.9.3

然后在脚本头(第一行)中:

#!/path/to/rvm/wrappers/my_app/ruby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接