【发布时间】:2014-01-07 10:52:45
【问题描述】:
我的 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...任何帮助将不胜感激。
【问题讨论】: