これは BASH での私の最初の試みであり、小さな問題が発生しています。このスクリプトの目的は、ZFS プールをスクラブし、ログ ファイルを作成することです。
以下の 19 行目を除いて、コードは意図したとおりに機能しています。(ログエントリ $LOG_LINE)。デバッグ目的で 18 行目を追加しましたが、動作しています。
18 行目は「プール 'tankm' は正常です」をログに書き込みますが、19 行目は「プール」のみを書き込みます。機能的には、これらの行は同じことを行っています (少なくとも私の目には)。
zpool status コマンドの出力でプール名の前に引用符が付けられているのがルート ケースであると想定しており、そのための文字の置換に取り組んでいますが、これら 2 行の解釈がどのように異なっているかを理解するのは難しいと思います。
前もってありがとうデクラン
#!/bin/bash
LOG_FILE=/home/declan/log/zfs_scrub
LOG_LAST=/home/declan/log/zfs_scrub_last
function LogEntry {
echo -e "$(date "+%Y %m %d %T") ; $1" >>$LOG_FILE 2>&1
}
cp $LOG_FILE $LOG_LAST
rm $LOG_FILE
LogEntry "Starting ZFS Scrub"
for POOL in $(zpool list -H -o name) ; do
LogEntry "Starting Scrub on $POOL"
zpool scrub $POOL 2>/dev/null
LOG_LINE=$(zpool status -x $POOL 2>&1)
echo -e "$(date "+%Y %m %d %T") ; $LOG_LINE" >>$LOG_FILE 2>&1
LogEntry $LOG_LINE
LogEntry "Ending Scrub on $POOL"
done
LogEntry "Ending ZFS Scrub"