首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能用crontab启动delayed_job守护进程?

为什么我不能用crontab启动delayed_job守护进程?
EN

Stack Overflow用户
提问于 2012-07-01 14:21:50
回答 1查看 1K关注 0票数 0

我有以下脚本,用于在ruby on rails中启动延迟的作业工作程序

代码语言:javascript
复制
require 'rubygems'
require 'daemon_spawn'
$: << '.'

RAILS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))

class DelayedJobWorker < DaemonSpawn::Base
  def start(args)
    ENV['RAILS_ENV'] ||= args.first || 'development'
    Dir.chdir RAILS_ROOT
    require File.join('config', 'environment')

    Delayed::Worker.new.start
  end

  def stop
    system("kill `cat #{RAILS_ROOT}/tmp/pids/delayed_job.pid`")
  end
end

DelayedJobWorker.spawn!(:log_file => File.join(RAILS_ROOT, "log", "delayed_job.log"),
                    :pid_file => File.join(RAILS_ROOT, 'tmp', 'pids', 'delayed_job.pid'),
                    :sync_log => true,
                    :working_dir => RAILS_ROOT)

它以下面的命令开始

代码语言:javascript
复制
user@mysystem:path/to/my/application$ ruby script/delayed_job start production
DelayedJobWorker started.

我正在尝试使用crontab在启动时自动执行此操作

为了做到这一点,我制作了这个脚本

代码语言:javascript
复制
#!/bin/bash
cd path/to/my/application
ruby script/delayed_job start production

这是我的crontab

代码语言:javascript
复制
# m h  dom mon dow   command
SHELL=/bin/bash
@reboot /path/to/my/script/delayed_job_at_startup.sh

当我重新启动系统时,脚本不成功,并且我从crontab收到以下消息

代码语言:javascript
复制
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <HOME=/home/finalsayan>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=finalsayan>

/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- daemon_spawn (LoadError)
    from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from script/delayed_job:24:in `<main>'

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-02 00:24:48

问题在于,要在rvm中使用cron,您必须加载rvm环境以获取文档,请参阅https://rvm.io/integration/cron/。cron在启动时调用的脚本如下所示

代码语言:javascript
复制
#!/bin/bash
source /usr/local/rvm/environments/default

# Go to the app
APP_HOME=/path/to/my/application
cd $APP_HOME

# start the delayed jobs
ruby script/delayed_job start production 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11280004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档