从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运行这个。
经过研究了一下,我试图设置宝石为全球,但是,我认为这可能没有奏效。
在此先感谢您的帮助!
这是因为您在命令行上拥有的环境变量在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
你找到吨分辨率他? – 2018-03-08 20:15:26