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