我们必须从一个非常旧的rails应用程序运行一些rails方法。因为它太旧了,所以我们不想更改代码或安装新的调度任务或 gem。因此,我们尝试通过crontab中的简单rails运行器命令启动这些方法。
我们尝试了一些组合,但服务器对我们来说是新的,我们不知道为什么 crontab 无法执行rails runner
命令。
这些是我们的尝试:
rails runner ApplicationController.method >> logfile.log
/bin/bash -l -c 'cd /path/to/code && rails runner ApplicationController.method' >> logfile.log
source ~/.bashrc && /bin/bash -l -c 'cd /path/to/code && rails runner ApplicationController.method' >> logfile.log
running a shell script with the rails runner command
ect.
所有的尝试都在正常的shell(通过SSH连接)中工作,但它从未从crontab工作过。命令始终创建日志文件,但它为空,我们确保命令未执行(由 rails c
检查)。
我们可以做些什么来使 crontabs 工作?
编辑:服务器使用rvm
来管理 Ruby 版本。也许这就是问题所在。
要在 crontab 中执行 ruby/rails 脚本,请使用/bin/bash。例:
* * * * * /bin/bash -l -c "ruby /home/abc/sample.rb"