我的cron工作不会完成。过去几个小时我一直在转动轮子而没有运气。
我的crontab中有这一行:
* * * * * /usr/local/rvm/rubies/ruby-2.0.0-p195/bin/ruby /home/pra/grinder/misc_scripts/daily_total_logger.rb
我可以运行命令:
/usr/local/rvm/rubies/ruby-2.0.0-p195/bin/ruby /home/pra/grinder/misc_scripts/daily_total_logger.rb
它没有问题。
我将它设置为每分钟运行一次,这样我就可以看到日志了,我确实在日志中看到了这个(/ var / log / cron):
Dec 19 01:32:01 hostname CROND[4574]: (root) CMD (/usr/local/rvm/rubies/ruby-2.0.0-p195/bin/ruby /home/pra/grinder/misc_scripts/daily_total_logger.rb)
我已经在两个不同的服务器上复制了这个相同的行为(在愚弄脚本一小时之后我想我只是将它移动到另一个服务器,但那里也有同样的问题)。
我还尝试了一件事。创建另一个具有相同权限的ruby文件,以执行其他操作(将日期时间附加到文件中)。我使用以下代码创建了/home/pra/grinder/misc_scripts/test.rb
open('/home/log.log', 'a') do |f|
f.puts Time.now.to_s
end
它运作得很好。快速检查权限显示两个文件都具有完美权限
-rw-r--r--. 1 root root 348 Dec 19 00:52 daily_total_logger.rb
-rw-r--r--. 1 root root 61 Dec 19 01:13 test.rb
我知道最好不要在root中运行它,我只是想消除所有潜在的问题。我不能为我的生活找出可能导致这种情况的原因。我简化了脚本,我对这个超级简单的脚本仍然有同样的错误:
require 'pg'
conn = PG.connect(dbname: '***',user: '***',password: '***', host: '***')
query = "INSERT INTO foobar (foo, bar) VALUES (1, 3)"
conn.exec(query)
puts "Done..."
如果我从命令行运行它,它工作正常。如果我把它作为一个cron工作运行,那就不会完成。我完全感到困惑 - 两个服务器上有同样的问题,一个是debian,一个是redhat ......任何帮助都会受到高度赞赏。
答案 0 :(得分:0)
我追溯到这一行:
require 'pg'
如果我在脚本中需要该库,则在作为cron作业调用时,其余脚本将停止运行,但从命令行调用时可正常工作。有关这方面的更多信息,我在这里更好地记录了问题(希望有人能说明为什么会发生这种情况):
Requiring a Ruby Gem in Ruby Script breaks Cron Job Execution