cron 如何根据日期输出到新的日志文件?

Posted

技术标签:

【中文标题】cron 如何根据日期输出到新的日志文件?【英文标题】:How can cron output to a new log file based on date? 【发布时间】:2015-02-16 19:08:51 【问题描述】:

我想将 cron 输出记录到一个过时的文件中 — /tmp/log/cron-2014-12-17.log

$ mkdir /tmp/log
$ chmod 777 /tmp/log
$ ls -lah /tmp/log
drwxrwxrwx 2 root root 4.0K Dec 17 21:51 .

Cron(通过 root 用户)

* * * * * /usr/bin/php /path/to/script.php > /tmp/log/cron-$(date "+%F").log 2>&1

/tmp/log 每分钟后都为空。

如果我从命令行手动运行脚本,则会创建一个日志文件,并且输出符合预期。

// Running it manually as a CLI works fine, but not as a cron
$ /usr/bin/php /path/to/script.php > /tmp/log/cron-$(date "+%F").log 2>&1

另外,如果我创建一个文件并 chmod 777 它,cron 将输出写入这个创建的文件。它只是不会即时创建一个。

// Let's create it first
$ touch /tmp/log/cron.log
$ chmod 777 /tmp/log/cron.log
// wait for the next minute...
$ tail -f /tmp/log/cron.log
output... output... output...

但这不适用于像 /tmp/log/cron-2014-12-17.log 这样的动态名称。

我错过了什么?

【问题讨论】:

Append current date to the filename via Cron?、Sending cron output to a file with a timestamp in its name、How to add the logs to a crontab with time stamp、How to log cron jobs? 等可能重复 【参考方案1】:

这将解决您的问题:

0 0 * * * /some/path/to/a/file.php >> /tmp/log/cron-`date +\%F`.log 2>&1

【讨论】:

以上是关于cron 如何根据日期输出到新的日志文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何为crontab日志创建文件夹(如果不存在),并根据日期将日志写入特定文件夹?

从cron运行时,Perl脚本不会将STDOUT输出到文件

杂集:centos7中利用logrotate工具切割tomcat日志

将带有日期的 stderr 重定向到来自 Cron 的日志文件

管理由 cron 作业创建的日志文件

logrotate日志管理工具