Cron作业以保持Rails服务器运行

时间:2018-08-13 22:21:02

标签: ruby-on-rails

我正在尝试将以下行添加到Rails应用程序的crontab中:

* * * * * lsof -i tcp | grep -v grep | grep -q puma || /home/me/app_name/bin/rails s

...简而言之,我有一个错误,偶尔会关闭我的Rails服务器,并且我想每分钟运行一次此命令以确保服务器保持尽可能的可用。 (实际错误是第二天的问题。)

最初,我遇到了一个错误:

shared_helpers.rb: 34 
in 'default_gemfile': could not locate Gemfile (Bundler::GemfileNotFound)

...追溯到bin / rails中的第4行:

load File.expand_path('../spring', __FILE__)

我将('../spring')更改为('./spring'),因为spring脚本与rails脚本位于同一目录中,而不位于父目录中。 (奇怪的是,无论我在路径中使用“ ..”还是“。”,都可以从命令行运行rails s。)

这至少摆脱了上面的错误,但是现在我有了以下内容:

/bin/sh: 1: lsof: not found
/bin/sh: 1: grep: not found
/bin/sh: 1: grep: not found
/usr/bin/env: 'ruby_executable_hooks': No such file or directory

我每分钟收到一次这些错误,所以至少我知道我输入的时间格式正确。

我的crontab的相关部分如下所示:

PATH=$PATH:/usr/share/rvm/rubies/ruby-2.4.1/bin/
GEM_PATH=$GEM_PATH:/usr/share/rvm/gems/ruby- 
2.4.1:/usr/share/rvm/gems/ruby-2.4.1@global
* * * * * lsof -i tcp | grep -v grep | grep -q puma || /home/me/app/bin/rails s

我也尝试过:

* * * * * lsof -i tcp | grep -v grep | grep -q puma || /usr/share/rvm/gems/ruby-2.4.1/bin/rails s

...但是出现相同的错误。

如上所述,我可以从命令行运行rails s。我知道从登录的shell运行命令的好处是可以读取登录脚本并设置环境变量,但是我不知道我需要做什么才能使该crontab中的环境进行协作。

注意:我没有为此使用whenever gem,因为我正在使用greplsof之类的外部命令;如果有一个等效的基于Rails的解决方案(以测试服务器是否正在运行,如果服务器未运行,则启动它),我可以这样做,而不是使用crontab。 (但我不知道那会是什么。)

0 个答案:

没有答案