从cron执行ruby脚本

问题描述:

我的脚本使用mysql,tiny_tds,fileutils和net/ftp。运行在红宝石1.9.3上。当我从文件夹内运行它时它工作得很好。从cron执行ruby脚本

但是,当我将它添加到cron选项卡时,tiny_tds不断失败。我不知道是否有任何其他宝石的失败,因为我不能获得通过这样的错误:

require': no such file to load -- tiny_tds (LoadError)

我试图从crontab中会使用相同的外壳执行它,我得到这个错误。

整个脚本只是1个文件。

我是ruby的新手,所以我的知识仅限于正确设置环境。

在文件的头我有

#!/usr/bin/ruby 
    require "mysql" 
    require "fileutils"; 
    require "tiny_tds" 
    require "net/ftp" 

总之,我从MySQL获得作业的列表,比较,对MSSQL,FTP文件过来,更新的MySQL时再工作就完成了。

而我需要从cron运行这个。

经过研究了一下,我试图设置宝石为全球,但是,我认为这可能没有奏效。

在此先感谢您的帮助!

+0

你找到吨分辨率他? – 2018-03-08 20:15:26

这是因为您在命令行上拥有的环境变量在crond执行代码时未设置。通常的嫌疑人是PATH,LD_LIBRARY_PATH,以及登录时设置的别名。

你可以看到的crond做什么:使用crontab -e

* * * * * set > /tmp/setvals 

创建上面的条目。让它运行一段时间。回到crontab -e并删除该新条目。

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

有RVM的多种方式与cron的合作,如果你使用脚本那么最简单的只是使用RVM - 这意味着不使用系统红宝石#!/usr/bin/ruby - 只是把在第一线#!/path/to/rvm/wrappers/ruby-1.9.3-p392/ruby

可以使用别名来阻止脚本硬编码一个红宝石路径:

rvm alias create my_app 1.9.3 

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

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