我正在尝试设置一个cron作业,每15分钟运行一个ruby脚本,它位于我的ror网站的数据库文件夹中。我在crontab中的行看起来像这样:
0,15,30,45 * * * * /bin/bash -l -c 'ruby /Users/arpitadey/rails_projects/sample_app/db/poller.rb'
poller.rb应该远程收集一些数据,然后使用新数据更新名为sites.db的数据库文件。 poller.rb和sites.db在同一个文件夹中 - 所以当我从终端运行poller.rb时,它会找到sites.db并更新它就好了。但是当poller.rb作为一个cron作业运行时,我收到邮件说没有这样的表,网站。此错误从poller.rb中的以下行发出:
currentEnergy = db.query("SELECT energydata FROM sites")
poller.rb中的上一行,
db=SQLite3::Database.new("sites.db")
没有发出任何错误。我今天刚刚了解了cron的工作(因为昨天你们中的一些人好心地指出了这些工作)我认为可能因为我没有关于一般unix事物的背景知识(或者我应该说的一般计算机科学),我无法理解很多关于这个主题的帖子。我是一名机械工程师,无法理解涉及unix背景知识的答案。我只需要知道如何更改我的crontab,以便cron知道在哪里找到我的数据库文件,以便poller.rb能够更新它。非常感谢提前!
答案 0 :(得分:0)
Cron不会对你的shell执行 - 因此需要设置任何环境变量。您可以编写一个执行该设置的shell脚本,然后运行ruby脚本。
让脚本看起来像:
。 $ HOME / .profile
ruby /Users/arpitadey/rails_projects/sample_app/db/poller.r
让cron作业执行该脚本。
好的,可能没有.profile脚本 - 所以在你的主目录中用你所有的envirornment变量创建一个文件。
称之为poller.sh
输入“env> poller.sh”
编辑poller.sh
制作第一行#!/ bin / sh
对于每个后续行将导出放在行的开头,因此它看起来像
#!/bin/sh
export GRAILS_HOME=/home/SillyUser/grails/
export PATH=/blah/blah/blah
...
At the bottom of the file:
ruby /Users/arpitadey/rails_projects/sample_app/db/poller.r
答案 1 :(得分:0)
在您的脚本中执行此操作:
Dir.chdir(File.expand_path(File.dirname(__FILE__)))