4

我在 crontab 中放置了一个工作,每 2 小时运行一次,我还希望将我的 bash 输出的日志文件放在一个单独的文件中。

输入:

0 0-23/2 * * * /tmp/sample.sh | tee /tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt  

输出:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
4

4 回答 4

2

百分比 (%) 符号是 cron 中的特殊字符。转义 % 符号。

0 0-23/2 * * * /tmp/sample.sh > /tmp/logfile_extract_$(date '+\%Y-\%m-\%d-\%H').txt 2>&1
于 2013-08-22T03:05:56.547 回答
2

完全有理由想要那个。如果您愿意,您完全可以使用tee并且仍然能够将输出捕获到MAILTO. 以这个 crontab 为例

SHELL=/bin/bash
MAILTO=someone@example.com
0 */2 * * * php /path/script.php | tee -a /path/log.$(date +"\%Y-\%m-\%d").txt

注意 Lars 所说的并避开那些百分比符号 ( %)

于 2015-04-02T15:36:36.783 回答
1

从你上面的评论

/tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt

问题是 1) /bin/sh 实际上是 bash 吗?我已经看到操作系统“更像是一些东西”,因此特定于 bash 的语法可能会抛出它。

0 */2 * * * /bin/bash -c '/tmp/sample.sh > /tmp/logfile_extract_$(date "+%Y-%m-%d-%H").txt 2>&1'

在这种情况下可能有效。或者您可以考虑反引号或从 cron 调用的包装脚本,它只是执行

/tmp/sample.sh > /tmp/logfile_extract_$(date "+%Y-%m-%d-%H").txt 2>&1
于 2013-08-21T23:09:45.530 回答
1

为什么要tee在 cron 作业中使用。要重定向输出,您可以执行以下操作:

0 */2 * * * /tmp/sample.sh > /tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt 2>&1

tee需要您的 tty 来显示输出,并且 cron 没有可用的 tty。

根据man tee

tee 实用程序将标准输入复制到标准输出,在零个或多个文件中进行复制。

于 2013-08-21T10:50:07.560 回答