[英]Bash script for moving and renaming application log files on Linux
我對在 linux 上編碼比較陌生。 我有以下用於移動 ERP 日志文件的腳本。
!/bin/bash #Andrew O. MBX 2015-09-03
#HansaWorld Script to periodically move the log file
_now=$(date +"%m_%d_%Y")
mv /u/OML_Server_72/hansa.log /u/HansaLogs/hansa_$now.log
代碼運行但不會將日志文件重命名為它被移動的日期。 我還想檢查文件何時超過 90M 大小,以便在每天結束時自動移動它。 某種 cron 工作。 請幫忙
編輯后這是我的新代碼。
#!/bin/bash
#Andrew O. MBX 2015-09-03
#HansaWorld Script to periodically move the log file
now=$(date +"%m_%d_%Y")
mv /u/OML_Server_72/hansa.log /u/HansaLogs/hansa$now.log
我想添加代碼來檢查 hansa.log 文件是否超過 90M 然后移動它。 如果不是,則保持原樣。
cd /u find. -name '*hansa.log*' -size +90000k -exec mv '{}' /u/HansaLogs\;
除了其他評論,還有一些其他的事情需要考慮。 tgo 的logrotate
建議是一個很好的建議。 在 Linux 中,如果您一直堅持使用實用程序等。man 文件(雖然一開始有點神秘),請提供簡明的使用信息。 要查看給定實用程序可用的日志,請使用man -k name
(某些發行版默認別名提供此選擇功能)例如:
$ man -k logrotate
logrotate (8) - rotates, compresses, and mails system logs
logrotate.conf (5) - rotates, compresses, and mails system logs
然后,如果您想要 logrotate 頁面:
$ man 8 logrotate
或 conf 頁面
$ man 5 logrotate.conf
關於腳本,您可能需要更改/考慮幾件事。 首先,雖然變量now
沒有任何問題,但您可能會對date
命令內置的now
用法感到困惑。 沒有沖突,但是寫now=$(date -d "now + 24 hours" "+%F %T")
看起來很奇怪。 (推薦一個像tstamp
這樣的名字,而不是時間戳的縮寫)。
對於可維護性、可讀性等......您可以考慮將您的路徑組件分配給有助於稍后提高可讀性的變量。 (下例)。
最后,在移動、復制、刪除等之前……驗證目標文件是否存在並在出現問題時提供錯誤消息總是一個好主意。 重寫可能是:
#!/bin/bash
#Andrew O. MBX 2015-09-03
#HansaWorld Script to periodically move the log file
tstamp=$(date +"%m_%d_%Y")
logdir="/u/HansaLogs"
logname="/u/OML_Server_72/hansa.log"
if [ -f "$logname" ]; then
mv "$logname" "$logdir/hansa_${tstamp}.log"
else
printf "error: file not found '%s'.\n" "$logname" >&2
exit 1
fi
注意: >&2
只是將printf
的輸出重定向到stderr
而不是stdout
。
至於find
命令,不需要cd
和find .
, find
命令將path
作為它的第一個參數。 此外, --size
選項內置了對 Megabytes M
支持。 此處的重寫可能如下所示:
find /u -name "*hansa.log*" -size +90M -exec mv '{}' /u/HansaLogs \;
總而言之,看起來你會毫無問題地學習 shell 編程。 早點養成良好的習慣,它們會為你以后省去很多悲傷。
嗨,伙計們,謝謝您的幫助。 到目前為止,我已經想出了這段代碼。 我被困在創建一個 cron 作業來定期運行這個說每 22 小時后
#!/bin/bash
#Andrew O. MBX 2015-09-03
#HansaWorld Script to Check if log file exists before moving:
tstamp=$(date +"%m_%d_%Y")
logdir="/u/HansaLogs"
logname="/u/OML_Server_72/hansa.log"
minimumsize=90000
actualsize=$(wc -c <"$logname")
if [ $actualsize -ge $minimumsize ]; then
mv "$logname" "$logdir/hansa_${tstamp}.log"
else
echo size is under $minimumsize bytes
exit 1
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.