我有这样的代码:
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) 。
我不知道这是为什么发生?
谢谢
您需要将您的工作分成两个命令(如下所示),以便在开始检查其大小之前closureshistory.txt 。
发生什么事情是if语句在被截断之前但在被写入之前查看文件的大小。 这意味着stream水线的最后一个组件就退出了,之前的一切都是用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
我没有意识到这样做,而不使用中间文件。 如果body不为空,则从命令行发送邮件的答案build议使用ifne实用程序来处理空/非空input的特殊情况。