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