每当gem:我设置:输出但日志文件没有出现在我期望的地方

时间:2013-01-30 20:14:05

标签: ruby-on-rails ruby macos cron whenever

在我的schedule.rb文件中,我有以下几行:

set :output, '/log/cron_log.log'

every 5.minutes do
  command 'echo "hello"'
end

我按照此问题Rails, using whenever gem in development中的建议运行whenever -w,并且我假设cronfile已编写并正在运行。 (我也试过重启Rails服务器。)

当我跑$ crontab -l时,我看到以下内容:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/bash
-l -c 'echo "hello" >> /log/cron_log.log 2>&1'

但我找不到日志文件。我检查了rails_project / log,〜/ log和/ log无济于事。在OSX btw。

如何将日志文件写入rails项目日志文件夹?

1 个答案:

答案 0 :(得分:31)

您的日志在哪里?

您将输出文件放在最高目录级别:

$ cd /log

查看文件是否存在以及文件中是否包含数据:

$ ls -la cron_log.log

根据需要创建日志文件:

$ touch cron_log.log

要为您自己的本地调试打开权限(请勿在生产中执行此操作!)

$ chmod +rw cron_log.log  

您的命令是否正在运行?

手动运行命令以确定它是否按预期工作:

$ /bin/bash -l -c 'echo "hello" >> /log/cron_log.log 2>&1'

要提高安全性并保护路径,请使用完整路径:

wrong: command 'echo "hello"'
right: command '/bin/echo "hello"'

要查找命令完整路径:

$ which echo

验证cron是否按预期运行:

$ sudo grep CRON /var/log/syslog

grep结果应该有这样的行:

Jan 1 12:00:00 example.com CRON[123]: (root) CMD (... your command here ...)

你在Mac上吗?

如果您没有在系统日志中看到输出,并且您在Mac上,则可能需要了解从cronlaunchd的Mac OSX切换。

请参阅cron plist(/System/Library/LaunchDaemons/com.vix.cron.plist)并使用stdout / stderr路径来调试cron本身。我不记得如果启动卸载和launchctl加载plist就足够了,或者因为它是一个系统守护进程,如果你必须完全重启。 (见where is the cron log file in lion

如何记录相对于Rails?

要将日志相对于Rails应用程序,省略前导斜杠(通常称之为cron.log)

set :output, "log/cron.log"

将日志放在特定的完全限定目录中:

set :output, '/abc/def/ghi/log/cron.log'

每当wiki有一些关于重定向输出的好例子时:

https://github.com/javan/whenever/wiki/Output-redirection-aka-logging-your-cron-jobs

示例:

every 3.hours do
  runner "MyModel.some_process", :output => 'cron.log'     
  rake "my:rake:task", :output => {:error => 'error.log', :standard => 'cron.log'}
  command "/usr/bin/cmd"
end