簡體   English   中英

Catalina.out在由bash腳本編輯后未記錄

[英]Catalina.out not logging after edition by bash script

這是具有默認日志記錄配置的tomcat7安裝,僅當我們重新啟動服務器時才推出catalina.out。 由於它是產品服務器,因此我們不能經常重新啟動它。 我們有大量進入該文件的條目,這導致我們的catalina.out在幾天之內變得非常高,直到耗盡整個磁盤空間為止。

由於我們不想更改已配置的日志記錄配置,而我們需要創建devops票證和所有較慢的東西,因此我編寫了一個bash腳本,該腳本每隔5分鍾通過crontab運行一次,該腳本將通過達到限制的一半時,腳本如下所示:

 if [ $catalinaSize -gt $catalinaThreshold ]; then
  middle=$(wc -l $catalinaLoc | awk '{ print $1 }')
  middle=$(( $middle / 2 ))
  sed -i -e 1,${middle}d $catalinaLoc
  echo "+++ catalina.out was cut by half"

基本上,該腳本檢查文件的當前大小並將其與閾值進行比較,然后使用wc和awk檢索該文件中的行數,以便可以使用sed然后將其剪切一半。

我在其他環境中對該腳本進行了測試,並且可以正常工作。 問題是在生產中成功運行了幾天后,突然之間,catalina.out從幾天前就沒有從tomcat獲得任何日志條目。

我考慮的解釋是,由於減少了一半的操作,Tomcat不再能夠寫入該文件。

是否有可能知道是什么導致Tomcat無法寫入該文件?

我懷疑這是sed -i造成的損害:在后台,它將輸出流寫入臨時文件,然后將臨時文件移動到原始名稱。 我懷疑由catalina持有的文件句柄不再指向任何文件。

您將必須找到一種方法來實際編輯文件,而不是替換文件。 這可能是sed的有效替代品:

printf "%s\n" "1,${middle}d" "wq" | ed "$catalinaLoc"

切線地,更簡單的方法來獲得行數:

middle=$(( $(wc -l < "$catalinaLoc") / 2 ))

當您重定向到wc ,它將不再打印出文件名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM