从cron执行ruby脚本

从cron执行ruby脚本,ruby,cron,rvm,tiny-tds,Ruby,Cron,Rvm,Tiny Tds,我的脚本使用mysql、tiny_tds、fileutils和net/ftp。在ruby 1.9.3上运行。当我从文件夹中运行它时,它工作得非常好 然而,当我将其添加到cron选项卡时,tiny_tds总是失败。我不知道其他宝石是否失败,因为我无法通过此错误: require':没有要加载的文件--tiny_tds(LoadError) 我尝试从crontab将使用的同一个shell执行它,但我得到了那个错误 整个脚本只有一个文件 我是ruby新手,所以我的知识在以正确的方式设置环境方面是有限的

我的脚本使用mysql、tiny_tds、fileutils和net/ftp。在ruby 1.9.3上运行。当我从文件夹中运行它时,它工作得非常好

然而,当我将其添加到cron选项卡时,tiny_tds总是失败。我不知道其他宝石是否失败,因为我无法通过此错误:

require':没有要加载的文件--tiny_tds(LoadError)

我尝试从crontab将使用的同一个shell执行它,但我得到了那个错误

整个脚本只有一个文件

我是ruby新手,所以我的知识在以正确的方式设置环境方面是有限的

在我的档案头上

    #!/usr/bin/ruby
    require "mysql"
    require "fileutils";
    require "tiny_tds"  
    require "net/ftp"
简而言之,我从mysql获得一个作业列表,将其与MsSQL、FTP文件进行比较,并在作业完成后再次更新mysql

我需要从cron运行这个

在研究了一段时间后,我尝试将gems设置为全局,但是,我认为这可能不起作用


提前感谢您的帮助

这是因为当crond执行代码时,命令行上的环境变量没有设置。通常的可疑对象是
PATH
LD\u LIBRARY\u PATH
,以及登录时设置的别名

您可以看到crond的功能:使用
crontab-e

* * * * *  set > /tmp/setvals
创建上面的条目。让它运行一会儿。返回到
crontab-e
并删除该新条目


/tmp/setvals
中的内容与shell在命令行上发出
set
命令时提供的内容进行比较。然后,您可以采取步骤修改cron作业环境的内容。

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