2014-03-26 42 views
0

我想检查每个小时如果delayed_job正在运行。对于这个我使用的cron用cron重新启动delayed_job

29 * * * * /var/jenkins/jobs/Production/workspace/integration/check_runnig_jobs.sh

脚本如下。 当它自己执行时,它会启动delayed_job。但是从cron执行时无法启动,并发送邮件到/ var /邮件/ WWW的数据是:

19时19分01秒:开始检查... 19时19分01秒:检查delayed_job的 - 19:19:01:没有运行,重新启动... 在任何源中找不到i18n-0.6.0 尝试运行bundle install。 + 19:19:01:delayed_job正在运行

之后在正在运行的进程中找不到delayed_job。

你能帮助我们吗?

剧本是

#!/bin/bash 
# Check jobs that should be running on the production environment. This script might be croned or run by jenkins, 

check_process() { 
    echo "$ts: checking $1" 
    [ "$1" = "" ] && return 0 
    [ `pgrep -fn $1` ] && return 1 || return 0 
} 

check_delayed_job() { 
     RAILS_ENV=production 
     export RAILS_ENV 
     name="delayed_job" 
     check_process $name 
     [ $? -eq 0 ] && echo "- $ts: not running, restarting..." && /var/jenkins/jobs/Production/workspace/script/delayed_job start 
     [ $? -eq 1 ] && echo "+ $ts: $name is RUNNING" 

     return 0 
} 

# timestamp 
ts=`date +%T` 

echo "$ts: begin checking..." 
check_delayed_job 

exit 0 
+0

你检查过[ '每当'](https://github.com/javan/whenever)宝石? – backpackerhh

+0

Delayed_job实际上运行良好,但是我从cron开始有问题,并且正在寻找一种方法来首先解决此问题。 – thebravoman

回答

0

找到它 - 你必须在脚本中设置环境的开头添加

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/jenkins/jobs/Production/workspace/script 
export PATH 

...