我的脚本使用了 mysql、tiny_tds、fileutils 和 net/ftp。在 ruby 1.9.3 上运行。当我从文件夹中运行它时,它工作得很好。
但是,当我将它添加到 cron 选项卡时,tiny_tds 总是失败。我不知道是否有任何其他 gem 失败,因为我无法通过此错误:
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 运行它。
经过一番研究,我尝试将 gem 设置为全局,但是,我认为这可能行不通。
在此先感谢您的帮助!
最佳答案
这是因为当 crond 执行您的代码时,您在命令行上的环境变量没有设置。通常的嫌疑人是 PATH
、LD_LIBRARY_PATH
和登录时设置的别名。
您可以看到 crond 做了什么:使用 crontab -e
* * * * * set > /tmp/setvals
创建以上条目。让它运行一段时间。返回 crontab -e
并删除该新条目。
将 /tmp/setvals
中的内容与在命令行上发出 set
命令时 shell 为您提供的内容进行比较。然后,您可以采取措施为您的 cron 作业环境修改内容。
关于ruby - 从 cron 执行 ruby 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236278/