リモートホストのログファイルで文字列を見つけようとします。ただし、スクリプトを実行しているホストにエコーを再インポートすることはできません。
#!/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
コマンドが正しい方法で呼び出されたとします。