在我的 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 顺便说一句。
如何获取要写入 Rails 项目日志文件夹的日志文件?
最佳答案
你的日志在哪里?
您将输出文件放在最高目录级别:
$ 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,您可能需要阅读有关 Mac OSX 从 cron
切换到 launchd
的内容.
查看 cron plist (/System/Library/LaunchDaemons/com.vix.cron.plist) 并使用 stdout/stderr 路径调试 cron 本身。我不记得 launchctl 卸载和 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'
Whenever 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
关于ruby-on-rails - 每当 gem : I set :output but the logfile doesn't show up where I'd expect it to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612818/