0

在我的 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"
4

1 回答 1

2

忘记 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等,并使脚本可用于在这些运行级别的启动时运行。

于 2012-10-01T08:11:08.377 回答