使用を余儀なくされている Plesk サーバーがいくつかあり、CLI を介してバックアップを処理するスクリプトを作成しました。問題は、Plesk バックアップ ツールでドメインのバックアップ中に問題が発生した場合、有用な情報を出力する唯一の方法は、バックアップ ジョブ全体を冗長フラグで実行することです。問題は、ジョブの実行中に 1 秒に 1 回ツールが出力されることですDomains [0/1]\n
。1 時間実行すると、3600 行の無駄な情報がバッファから有用な情報をプッシュすることになります。例えば:
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
Domains [0/1]
-------------- Start print backup log hire --------------
<?xml version="1.0" encoding="UTF-8"?>
<execution-result status="success" log-location="/usr/local/psa/PMM/sessions/2013-11-08-114156.109/migration.result"/>
-------------- End print backup log hire --------------
私がやろうとしているのは、これをパイプするコマンドを作成することです。これは単にハッシュマークに置き換え\nDomains [\d+/\d+]
られるため、上記は次のようになります。
Domains [0/1]########
-------------- Start print backup log hire --------------
<?xml version="1.0" encoding="UTF-8"?>
<execution-result status="success" log-location="/usr/local/psa/PMM/sessions/2013-11-08-114156.109/migration.result"/>
-------------- End print backup log hire --------------
sed
のN
フラグをのように使用する方法sed ':a;N;$!ba;s:\nDomains \[[0-9]\+/[0-9]\+\]:#:g'
や、を使用する方法を見つけましtr
たが、これにより、出力全体がバッファリングされ、バックアップ スクリプトが完全に終了した後にのみ出力が生成されます。
ライブ ステータス出力を取得できるように、この代替品をインストリームで動作させるにはどうすればよいですか?
問題のコマンドは次のとおりです。
ssh ${server} sudo ${pbackup} domains-name -v --output-file=${ftp_spec} $domain 2>&1 | \
sed ':a;N;$!ba;s:\nDomains \[0/1\]:X:g'
編集:数十のバックアップを実行せずに関連するテキストを生成するための短いテストスクリプトも思いつきました:
#!/bin/bash
echo "blah blah pre text"
i=0
while [ $i -lt 5 ]; do
echo 'Domains [0/1]'
sleep 1
i=$(($i + 1))
done
echo "blah blah post text"