【问题标题】:ROR, Redis, Resque, God & Cron on Ubuntu Server - BootUbuntu 服务器上的 ROR、Redis、Resque、God 和 Cron - 引导
【发布时间】:2012-10-01 07:56:38
【问题描述】:

我在我的 ruby​​ 应用程序中做了几项工作,上帝会照顾我。但是,当服务器重新启动时,作业会停止。我想避免这种情况,所以我在我的服务器上制作了这个脚本。看起来像这样。

my_app.sh

#!/bin/bash

# god tasks

#


case $1 in

start)

/usr/local/rvm/gems/ruby-1.9.3-p194/bin/god      
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/god start
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/god load /usr/local/Linux/apache2/www/hej.se/ruby/config/resque.god
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/god load /usr/local/Linux/apache2/www/hej.se/ruby/config/resque_schedule.god

;;
esac

exit 0

如果我手动登录并写

"/etc/init.d/my_app 启动"

它给了我

Sending 'start' command

No matching task or group
Sending 'load' command with action 'leave'

The following tasks were affected:
  resque-0
  resque-1
  resque-2
  resque-3
  resque-4
Sending 'load' command with action 'leave'

The following tasks were affected:
  resque_scheduler

一切正常,它做我想做的事,即工作。

我尝试了几种方法来启动这个脚本(Linux 10.4.4 LTS)、rc.local、rc-default,现在我最近的尝试是 crontab。

脚本必须在我的用户而不是 root 下运行,(如果我在 root 下运行它找不到 ruby​​ 安装)。

因此,我在我的用户帐户下配置了 crontab:

@reboot /etc/init.d/my_app start

遗憾的是,这不起作用......我不知道我做错了什么。这可能没有必要。我的意思是你不应该在启动 ruby​​ 应用程序时自动执行此操作吗?

我在这台服务器上使用乘客,不知道这是否与此有关?

下面的解决方案是我对 sh 所做的更改:

my_app.sh

bash -c "source /usr/local/rvm/scripts/rvm && /usr/local/rvm/gems/ruby-1.9.3-p194/bin/god"      
bash -c "source /usr/local/rvm/scripts/rvm && /usr/local/rvm/gems/ruby-1.9.3-p194/bin/god start"
bash -c "source /usr/local/rvm/scripts/rvm && /usr/local/rvm/gems/ruby-1.9.3-p194/bin/god load /usr/local/Linux/apache2/www/hej.se/ruby/config/resque.god"
bash -c "source /usr/local/rvm/scripts/rvm && /usr/local/rvm/gems/ruby-1.9.3-p194/bin/god load /usr/local/Linux/apache2/www/hej.se/ruby/config/resque_schedule.god"

【问题讨论】:

    标签: ruby-on-rails redis crontab boot god


    【解决方案1】:

    忘记 cronjob。

    Centos/Fedora:

    sudo chmod a+x /etc/init.d/my_app
    sudo chkconfig --add my_app
    sudo chkconfig my_app on
    

    Ubuntu/Debian:

    sudo update-rc.d my_app defaults
    

    这两个符号都将脚本链接到 /etc/rc1.d/etc/rc2.d 等,并使脚本可在这些运行级别的启动时运行。

    【讨论】:

    • 如何让脚本在启动时运行?尝试在引导下运行时找不到 ruby​​... "/usr/bin/env: ruby​​: No such file or directory"
    • 我上面描述的命令会将它添加到启动过程中。签入 /etc/rc*.d ,这些是该运行级别 (0-6) 自动运行的所有脚本(他们的 start 命令)。
    • 如果找不到你的红宝石,那么你只需要找出路径。 RVM 往往会弄乱这些东西,我通常不建议在生产服务器上使用它,但既然你已经安装了它,你只需要弄清楚如何配置它才能正确找到 ruby​​。
    • 这就是诀窍!哇!非常感谢 :) 我用解决方案编辑了我的 q。
    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2013-02-16
    • 2019-06-06
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多