Tee 命令正在减少线路吗?

Tee 命令正在减少线路吗?

我有这样的代码:

54 08 * * * /usr/local/bin/curator --dry-run --config /home/itadmin/.curator/curator.yml /home/itadmin/.curator/daily.yml 2>&1 | /usr/bin/tee -a /home/itadmin/.curator/logs.txt | /usr/bin/tee /home/itadmin/.curator/history.txt | if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then  mail -s 'Snapshot Status' [email protected]; fi

我正在做的是将 cron 的输出发送到 logs.txt 以供历史记录目的,并将其发送到 history.txt,其中 if 条件将起作用。

实际上 cron 输出是这样的

2017-05-17 08:33:01,395 INFO      Preparing Action ID: 1, "snapshot"
2017-05-17 08:33:01,404 INFO      Master-only flag detected. Connected to non-master node. Aborting.

但是我在 logs.txt 中得到的是

2017-05-17 08:54:01,427 INFO      Preparing Action ID: 1, "snapshot"

在 history.txt 文件中我什么也没有得到

但是当我删除 if 命令时这些工作正常(即。if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then mail -s 'Snapshot Status' [email protected]; fi)

我不知道为什么会发生这种情况?

谢谢

答案1

您需要将您的作业分成两个命令(如下所示),以便history.txt在开始检查其大小之前将其关闭。

实际情况是,该if语句查看文件的大小,在文件被截断之后但尚未写入之前。这意味着管道的最后一个组件刚刚退出,而在此之前的所有组件都随之消失SIGPIPE

54 08 * * * /usr/local/bin/curator --dry-run --config /home/itadmin/.curator/curator.yml /home/itadmin/.curator/daily.yml 2>&1 | /usr/bin/tee -a /home/itadmin/.curator/logs.txt > /home/itadmin/.curator/history.txt; if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then mail -s 'Snapshot Status' [email protected] < /home/itadmin/.curator/history.txt; fi

我不知道有没有不使用中间文件来实现这一点的方法。如果正文不为空,则从命令行发送邮件建议使用该ifne实用程序来处理空/非空输入的特殊情况。

相关内容