リモートホストのgrepログファイル

リモートホストのgrepログファイル

リモートホストのログファイルで文字列を見つけようとします。ただし、スクリプトを実行しているホストにエコーを再インポートすることはできません。

#!/bin/bash
#dt=$(date +"%Y%m%d")
#HHMM=$(date '+%H:%M')
key="keys/cash_prod_key"



if
        ssh -o StrictHostKeyChecking=no -qni $key user@host "cat /var/log/FILE_send.log | grep FILENAME | grep -i success"\;
then
        echo "Success"
fi

私はこれが最も正しいアプローチだとは思わない。

ベストアンサー1

問題は無効なホスト名

この答えは、より良い方法でコードを書く方法に焦点を当てています。

リモートホストで完全パイプラインを実行する必要はありません。コマンドラインから複雑なコマンドを実行すると、ssh特に引用の観点からエラーが発生しやすくなります。

代わりに:

#!/bin/bash

key="keys/cash_prod_key"

ssh_args=( -o StrictHostKeyChecking=no -qni "$key" user@host )

if ssh "${ssh_args[@]}" cat /var/log/FILE_send.log |
   grep -F 'FILENAME' |
   grep -q -i -F 'success'
then
    echo 'Success'
fi

これはcatリモートホストでのみ実行され、次の両方のコマンドがgrepローカルで実行されます。

また、パターンとして使用される文字列が次のようであると仮定し、コマンド-Fにフラグを追加しました。grepいいえ正規表現ですが、検索したいリテラル文字列です。最後のgrep使い方-q、実際には興味がないのでより出力、文字列が含まれていることを確認してくださいsuccess

読みやすくするために使用されたパラメータをssh配列に入れて、後で呼び出しに使用できるようにしました。スクリプトはまだ文法的に正確です。また、変数などの拡張は、どのコンテキストであるかを知らない限り、常に二重引用符で囲む必要があります。これは必須ではありません。

sshコマンドが正しい方法で呼び出されたとします。

おすすめ記事