2011-05-12 152 views
0

我正在尝试设置一个cron作业,每15分钟运行一次生活在我的ror网站数据库文件夹内的ruby脚本。该生产线我有我的crontab是这样的:Cron作业无法访问数据库文件我想更新

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

Cron不会执行你的shell - 所以任何环境变量都需要设置。您可以编写一个执行设置的shell脚本,然后运行ruby脚本。

让脚本看起来像这样:

。 $ HOME/.profile文件

红宝石/Users/arpitadey/rails_projects/sample_app/db/poller.r

,只是有cron作业执行该脚本。

好的,可能没有.profile脚本 - 所以在你的主目录中用你所有的环境变量创建一个文件。

说它poller.sh

型 “ENV> poller.sh”

编辑poller.sh

做的第一行#!/ bin/sh的

每个以下line把出口放在行的开头,所以它看起来像

#!/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 
+0

这就是我改变我的crontab到最后:0,15,30,45 * * * */bin/bash -l -c'。 $ HOME/.profile文件; ruby /Users/arpitadey/rails_projects/sample_app/db/poller.rb'。但它是说它不知道/Users/arpitadey/.profile的位置。所以很明显我很被误解。 – pitachip 2011-05-12 21:50:49

+0

我会认为你没有误解,但我不清楚:)。可能没有.profile。我会创建一个shell脚本,其中包含启动poller.r脚本的变量。比cron作业启动该shell脚本。 – 2011-05-12 22:19:53

+0

这是你的意思吗?0,15,30,45 * * * */bin/bash -l -c'cd/Users/arpitadey/rails_projects/sample_app; ruby /Users/arpitadey/rails_projects/sample_app/db/poller.rb'它仍然无法找到我的数据库,sites.db :( – pitachip 2011-05-12 23:42:50

0

Do thi s在你的脚本中:

Dir.chdir(File.expand_path(File.dirname(__FILE__))) 
+0

现在我的crontab行看起来像这样:0,15,30,45 * * * */bin/bash -l -c'cd/Users/arpitadey/rails_projects/sample_app; ruby​​/Users/arpitadey/rails_proje cts/sample_app/db/poller.rb'你是说它应该看起来像这样吗? 0,15,30,45 * * * */bin/bash -l -c'Dir.chdir(File.expand_path(File.dirname(__ FILE__))) ; ruby /Users/arpitadey/rails_projects/sample_app/db/poller.rb' – pitachip 2011-05-12 23:30:43