質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

1122閲覧

ncコマンド実行結果監視のためのスクリプト

tk_flavor

総合スコア104

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2019/04/05 16:47

編集2019/04/08 13:52

dovecotプロセスの110ポート番号にncコマンドで接続し、その接続結果を基に真偽比較し、
dovecotプロセスを再起動させるスクリプトを作成中です。

ncコマンドではなく、PSコマンド実行結果判定でもいいのですが
今回の質問では、ncコマンドで実行結果を判定にしたいと思っています。

下記が作成中のスクリプトです スクリプト名はmonitor.shです

#!/bin/sh CHECK=DOVECOT DOVECOT_PORT=110 DEST=localhost dovecot_nc_result=`echo -n |/usr/bin/nc $DEST 110 |awk '{print $1,$2,$3}'` if [ $dovecot_nc_result -eq "+OK Dovecot ready." ]; then echo "OK" else /usr/bin/systemctl restart dovecot > /dev/null 2>&1 echo `date`|mail -s "alert ${DEST} ${CHECK} NG!" ${MAIL_TO} fi

内容は、

echo -n |/usr/bin/nc smail02.prod.carview.co.jp 110 |awk '{print $1,$2,$3}' +OK Dovecot ready.

ncコマンド実行結果の 「+OK Dovecot ready.」の文字列と
IF文条件内で+OK Dovecot ready.文字列とを比較して
一致していれば、echo "OK"
不一致ならば、
/usr/bin/systemctl restart dovecot
実行するスクリプトになります。

+OK Dovecot ready. はあらかじめ、変数指定でもいいのかとは思っています


sh -x monitor.shでテスト実行すると
monitor.sh: 6 行: [: 引数が多すぎます となりますなります

6行目は if [ $dovecot_nc_result -eq "+OK Dovecot ready." ]; then
になります。

この引数が多すぎますとなる解決をするにはどうすればいいのでしょうか
また、IF文内で+OK Dovecot ready.
の文字列比較する時の記述自体が誤りがあるのでしょうか

ご教示頂けますと幸いです

宜しくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

if [ "$dovecot_nc_result" = "+OK Dovecot ready." ]; then
です。
[コマンドの第一引数が"+OK Dovecot ready"で、第二引数が=で、第三引数が"+OK Dovecot ready."で、第一引数と第三引数が比較されます。

if [ $dovecot_nc_result -eq "+OK Dovecot ready." ]; then
だと、変数を展開すると、
if [ +OK Dovecot ready. -eq "+OK Dovecot ready." ]; then
になり、第一引数が+OKで、第二引数がDovecotで、第三引数がready.、(以下略)で、正しい[コマンドの構文になりません。
また、-eqは数値の比較演算子で、文字列の等値比較は=を使います。

投稿2019/04/05 17:01

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tk_flavor

2019/04/08 13:51

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問