ruby-on-rails - 保持 Rails 服务器运行的 Cron 作业
问题描述
我正在尝试将以下行添加到 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,因为我使用的是外部命令,例如grep
and lsof
; 如果有一个等效的基于 rails 的解决方案(测试服务器是否正在运行,如果没有则启动它),我可以这样做而不是使用 crontab。(但我不知道那会是什么。)
解决方案
推荐阅读
- sql - 如何在 Azure sql 中将整数列转换为逗号分隔的行
- asp.net - 如何解决这个丢失的水晶报告程序集?
- python - 如何在 Python 中修复 selenium“DevToolsActivePort 文件不存在”异常
- javascript - Javascript - 模板文字 - 三元运算
- javascript - 删除倒数计时器中的 0
- angular - angular 5 动态组件 未找到组件工厂
- python - 参数“弱”或“强”对 scipy.sparse.csgraph.connected_components 有什么作用?
- python-3.x - rabbitpy - 在上下文管理器之外未引发异常
- c# - CreateUploadSession() 因 IE11 和 Edge 的请求而失败
- vb.net - VB.Net Excel 透视过滤器