我有一個輸出各種狀態消息的基本腳本。例如重定向Bash子腳本的輸出
~$ ./myscript.sh
0 of 100
1 of 100
2 of 100
...
我想將它包裝在父腳本中,以便運行一系列子腳本並在整體完成時發送電子郵件,例如, topscript.sh
#!/bin/bash
START=$(date +%s)
/usr/local/bin/myscript.sh
/usr/local/bin/otherscript.sh
/usr/local/bin/anotherscript.sh
RET=$?
END=$(date +%s)
echo -e "Subject:Task Complete\nBegan on $START and finished at $END and exited with status $RET.\n" | sendmail -v [email protected]
我運行此類似:
~$ topscript.sh >/var/log/topscript.log 2>&1
然而,當我運行tail -f /var/log/topscript.log
檢查日誌我什麼也看不見,即使運行頂部顯示myscript.sh當前正在執行,並因此推測輸出狀態消息。
爲什麼不在父級日誌中捕獲子腳本的stdout/stderr?我該如何解決?
編輯:我也在遠程計算機上運行這些,通過ssh使用僞tty分配連接,例如, ssh -t [email protected]
。僞tty可能會干擾?
如果下面的避難所的答案沒有幫助,你可能想嘗試縮小發生錯誤的地方。有些事情要嘗試:(1)./myscript.sh> tmp.log 2>&1'是否寫入'tmp.log'?如果不是,可能是檢查'[[-t 1]]',並且只在標準輸出是TTY時才寫消息。 (2)'topscript.sh'完成後,你看到日誌中的消息嗎? (換句話說,這只是他們被推遲了嗎?這是庇護所,只有一個人的答案都暗示。) – ruakh 2011-12-21 18:33:21