2

使用を余儀なくされている 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 --------------

sedNフラグをのように使用する方法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"
4

3 に答える 3

0

私が知る限り、改行なしで sed に何かを出力させる方法はありません。保持したい行がある場合に、指定された量のハッシュと改行を出力する sed スクリプトを作成できます。現在のスクリプトはこれを行いません。代わりに、入力全体を読み取ってから編集を行います。

#-記号が必要ない場合は、使用できます

| fgrep -v 'Domains [0/1]'

それらの行を単純に無視します。

于 2013-11-08T22:02:27.110 に答える
0
| sed -n -u "/Domains \[0\/1\]/ !p"

-u は sed のストリーム バージョンです。sed は最初の EOF まで動作しますが、結果を与える前に結果全体をバッファリングしません。

于 2013-11-11T06:28:49.050 に答える