2012-05-30 37 views
0

我想执行rake太阳黑子:reindex RAILS_ENV =每四个小时执行一次生产命令。为了实现这一点,我使用shell编程编写了简单的bash脚本。我将在终端成功运行,但如果我试图在crontab中运行它,那么它不起作用。我使用的操作系统是centos。如何在后台每四个小时运行一次sunspot reindex

这里是我的bash脚本代码

#!/bin/bash 
#export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin 
export PATH=/usr/local/rvm/gems/ruby-1.9.2-p290/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.2-p290/bin:/usr/local/rvm/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin: 
echo "started" 
cd /var/www/html/spotchase2 
pwd 
source /usr/local/rvm/environments/ruby-1.9.2-p290 
bundle install 
if [ "$?" = 0 ]; then 
    echo `date` 
fi 
source /usr/local/rvm/environments/ruby-1.9.2-p290 
#/usr/local/rvm/gems/ruby-1.9.2-p290/bin/rake sunspot:reindex RAILS_ENV=production 
rake sunspot:reindex RAILS_ENV=production 
if [ "$?" = 0 ]; then 
    echo "complete" 
fi 

请帮我解决这个问题。

编辑

我重定向输出一个文本文件。在那个文本文件中只有开始,捆绑安装和日期。我没有收到完整的信息,因此我开始知道它没有工作,并且在该文本文件中没有收到任何错误。

请帮我解决这个问题。

+0

问题是什么?你有错误信息吗?你为什么说它不起作用? – tripleee

回答

2

通常,我使用whenever gem来处理这样的事情。我不必写一个bash脚本,一个rake脚本就好了。 Whenever将为crontab生成正确的语法。

在我的项目中,我有几个脚本需要在后台始终运行。这是生成contab文件的命令。

whenever --update-crontab --set environment=production --load-file config/schedule_client.rb --user ubuntu 

它会产生这样的东西。

0 2 * * * /bin/bash -l -c 'source /home/ubuntu/.rvm/scripts/rvm && cd /var/www/yoolk_statistics_api && RAILS_ENV=production bundle exec rake statistics:generate_clienst --silent >> log/client.log 2>&1' 

,以确保我的crontab总是工作,我将输出重定向到日志文件,这样我可以看到它的运行与否。在我的Ubuntu服务器中,我通常检查syslog file进行调试。

+0

非常感谢@Chamnap,你的回答帮了我很多 –

+0

不客气。 – Chamnap

相关问题