腳本中使用tee命令應該注意的

       今天早上起來看到非法信息報警郵件爲空,非常納悶,明明昨天已經調試好了的,怎麼會?於是開始找原因,終於發現了問題的所在。
       登錄到中控,看那個過濾非法信息的腳本產生的log文件,果然爲空,說明腳本執行了,但是沒有產生結果。於是,我手動去執行那個腳本,結果很正常,產生的log文件裏記錄了全部的非法信息,很正常,那爲什麼在crontab裏就不行呢。我的計劃任務是這樣寫的:
0 7 * * *  /bin/bash /home/adminxxx/mail-feifa.sh &>/dev/null
       注意到後面的 &>/dev/null了吧,即把所有產生的信息都輸出到“黑洞”,然後我突然想起腳本里使用了tee命令,當初是爲了測試時既能生成log文件又可以在屏幕上輸出而使用的。例如:echo "hello world!" | tee /home/hello.log  ,她先會在屏幕上輸出然後會把輸出的數據流重導向hello.log文件,這個過程是一個流過程,也就是按順序的。而我在第一步就把數據流導向了“黑洞“,哪還有什麼數據流被寫導文件裏呀,所以那個log文件爲空。

       解決方法:把腳本里的tee命令替換成>或者在計劃任務中去掉 &>/dev/null。首選第一中方法。
 
 
注意:以上解釋有誤,tee命令是從標準輸入讀取數據,將其內容輸出到標準輸出,同時保存到文件。注意是同時,而非先輸出到標準輸出設備(屏幕),再流向文件的。做事千萬不要想當然,致歉!


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章