在我的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项目日志文件夹?
答案 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上,则可能需要了解从cron
到launchd
的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应用程序,省略前导斜杠(通常称之为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