Cron

tee 命令正在減少線條?

  • May 18, 2017

我有這樣的程式碼:

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' xyz@abc.com; 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' xyz@abc.com; fi).

我不知道為什麼會這樣?

謝謝

您需要將作業拆分為兩個命令(如下所示),以便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' xyz@abc.com < /home/itadmin/.curator/history.txt; fi

我不知道不使用中間文件的方法。如果正文不為空,則從命令行發送郵件的答案建議將該ifne實用程序用於空/非空輸入的特殊情況。

引用自:https://serverfault.com/questions/850644