簡體   English   中英

用於在 Linux 上移動和重命名應用程序日志文件的 Bash 腳本

[英]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命令,不需要cdfind . 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.

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