Ruby on rails 4 Cron作业openshift错误

Ruby on rails 4 Cron作业openshift错误,ruby-on-rails-4,cron,openshift,Ruby On Rails 4,Cron,Openshift,我有一个rails 4 openshift应用程序。我正在尝试运行cron作业。当我自己运行脚本时,它运行得非常好。剧本是: #!/bin/bash /bin/bash -l -c 'cd $OPENSHIFT_REPO_DIR && bundle exec bin/rails runner -e production "Payment.charge_customers_pay_experts"' 问题是日志文件给了我以下错误 Wed Feb 3 22:57:05 EST 2

我有一个rails 4 openshift应用程序。我正在尝试运行cron作业。当我自己运行脚本时,它运行得非常好。剧本是:

#!/bin/bash
/bin/bash -l -c 'cd $OPENSHIFT_REPO_DIR && bundle exec bin/rails runner -e production "Payment.charge_customers_pay_experts"'
问题是日志文件给了我以下错误

Wed Feb  3 22:57:05 EST 2016: START minutely cron run
__________________________________________________________________________
/var/lib/openshift/56a438107628e18b30000111/app-root/runtime/repo//.openshift/åcron/minutely/charge_customers_pay_experts:
Warning: You're using Rubygems 2.0.14 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.
/var/lib/openshift/56a438107628e18b30000111/app-root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/sid.rb:39:in `getpgid': Permission denied (Errno::EACCES)
from /var/lib/openshift/56a438107628e18b30000111/app-root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/sid.rb:39:in `pgid'
from /var/lib/openshift/56a438107628e18b30000111/app-root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/server.rb:78:in `set_pgid'
from /var/lib/openshift/56a438107628e18b30000111/app-root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/server.rb:34:in `boot'
from /var/lib/openshift/56a438107628e18b30000111/app-root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/server.rb:14:in `boot'
from -e:1:in `<main>'
__________________________________________________________________________
Wed Feb  3 22:57:06 EST 2016: END minutely cron run - status=0
__________________________________________________________________________
Wed Feb 3 22:57:05 EST 2016:开始分钟cron运行
__________________________________________________________________________
/var/lib/openshift/56a438107628e18b30000111/app root/runtime/repo/。openshift/cron/minutely/charge\u customers\u pay\u experts:
警告:您正在将Rubygems 2.0.14与Spring一起使用。至少升级到Rubygems 2.1.0并运行“gem pristine--all”,以获得更好的启动性能。
/var/lib/openshift/56a438107628e18b30000111/app root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/sid.rb:39:在“getpgid”中:权限被拒绝(Errno::EACCES)
from/var/lib/openshift/56a438107628e18b30000111/app root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/sid.rb:39:in'pgid'
from/var/lib/openshift/56a438107628e18b30000111/app root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/server.rb:78:in'set_pgid'
from/var/lib/openshift/56a438107628e18b30000111/app root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/server.rb:34:in'boot'
from/var/lib/openshift/56a438107628e18b30000111/app root/runtime/repo/vendor/bundle/ruby/gems/spring-1.6.2/lib/spring/server.rb:14:in'boot'
from-e:1:in`'
__________________________________________________________________________
2016年2月3日星期三22:57:06美国东部时间:每分钟结束cron运行-状态=0
__________________________________________________________________________

我已经确定脚本是可执行的。我不确定我是否遗漏了什么。有人有什么想法吗?

我不知道可执行的脚本一定与此有关。这看起来更像是权限错误。运行cron作业的系统用户是否具有正确的运行权限?您可以通过登录该用户(或
sudosu-
)然后手动执行脚本中的命令来测试这一点

/bin/bash-l-c'cd$OPENSHIFT\u REPO\u DIR和&bundle exec bin/rails runner-e制作“付款、收费、客户付款、专家付款”

请确保将
$OPENSHIFT\u REPO\u DIR
变量替换为指向OPENSHIFT REPO目录的正确路径

您可能只需要将cronjob运行时所使用的用户添加到对文件具有权限的组中,或者可能将cronjob作为更特权的用户运行(特权在于它对所需文件具有权限)


顺便说一句,我只能将此作为一个答案发布,因为Stack Overflow告诉我需要50个信誉点进行评论。

我通过在gemfile中注释掉“spring”gem来修复此问题。但显然这是一个已知的问题

在这个问题得到解决之前,目前还有一个变通办法。您可以编辑/usr/libexec/openshift/cartridges/cron/bin/cron_runjobs.sh,在
timeout
前面添加
setsid
,使其运行
setsid timeout…
,因为这允许timeout命令实际更改sid