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

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

ただいまの
回答率

90.51%

  • cron

    214questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

  • Sendmail

    43questions

    Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

  • csh

    23questions

    cshは、C言語スタイルの構文を持つUNIX系OSのシェルの1つのことです。

  • Solaris

    18questions

    Solarisは、SunSoft社が開発・販売を行っているUnix系のOSです。Sun Microsystems社製コンピュータで動作し、またPC/AT互換機で動作するバージョンもあります。旧名称は「SunOS」ですが、現在はSolarisのカーネル部分をSunOSと呼んでいます。

solaris 11 bashで監視スクリプト

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 198

raccoondog

score 13

solaris 11のcronを使って、コマンドを実行しています。

cronに登録しているシェルスクリプトAは、単純にコマンド実行のみとなっております。

シェルスクリプトAを改修して、コマンド実行判定をして(echo $!)
➀正常な場合には、次のステップでログ監視
➁異常な場合には、メーリングリストへエラー通知

➀のログ監視では、いくつかの文字列(Error,Skipped)を検索キーにして監視

文字列がヒットしたら、メーリングリストへエラー通知
文字列がヒットしなかったら、正常終了(exit 0)

としたいです。

※現状

#!/bin/chs
#特定のコマンド実行
#
(特定のコマンド実行)

※改修後

#!/bin/chs
#特定のコマンド実行
#
(特定のコマンド実行)

:コマンドステータス監視
if(異常系)
メール通知
else if(正常系)
:ログ監視へ

:ログ監視

(ログ監視の仕組み)

if(異常系)
メール通知
else if(正常系)
:正常終了へ

:正常終了
exit 0


※質問内容追記

➀ログファイル監視について

test.cmd >> test.log

test.logファイルを特定の文字列(Error)で検索し、エラーがあった場合にエラー内容をメール送信させたい

※前回検索した行以降としたいです。

➁日付のセットについて
setenv TIME 'date "+%y/%m/%d %H:%M:%S"`
指定があいまいです。
と言われます。

➂sendmailコマンドのメール本文送付設定について

setenv MAIL_CMD "/usr/sbin/sendmail"
setenv MAIL_TMP_FILE "/mail_tmp_file"
setenv CHECK_LOG "/check.log"
setenv ADDR "xxx@xxx.com"

echo "メール送信テスト" >> ${MAIL_TMP_FILE}
${MAIL_CMD} -f `hostname`@xxx.com ${ADDR} < ${MAIL_TMP_FILE}

⇒メール本文内容が文字化けします。。。


ログ監視シェルスクリプト

log_kanshi.sh


#--- 変数初期値代入 ------------------------
export WATCH_FILE="/export/home/srdcs/embulk_test/log/bulkinsert_M_ORG.log"
export MAIL_CMD="/usr/sbin/sendmail"
export MAIL_TMP_FILE="/export/home/srdcs/embulk_test/mail/mail_tmp_file"
export CHECK_LOG="/export/home/srdcs/embulk_test/mail/check.log"
export MAIL_LIST="/export/home/srdcs/embulk_test/mail/mail.list"
export ERROR_CODE_001="Error"
export TIME="`date '+%y/%m/%d %H:%M:%S'`"

hit_action() {
    while read line
    do
        echo ${WATCH_FILE} | grep -q "${ERROR_CODE_001}"
        if [ $? = "0" ];then
            echo "error occurred" >> ${MAIL_TMP_FILE}
            ${MAIL_CMD} -f embulk_`hostname`@jp.yazaki.com ${ADDR} < ${MAIL_TMP_FILE}
        fi
    done
}

if [ ! -f ${WATCH_FILE} ]; then
    touch ${WATCH_FILE}
fi

tail -n 0 --follow=name --retry $TARGET_LOG | hit_action~


●2019/3/5の実行状況

●問題
プログラム実行時に、プロンプトがかえってこず
手動でenterキーを押下しないとプログラム実行が完了しない


●プログラム

srdcs04% cat log_kanshi.sh
#!/bin/bash
#--- 変数初期値代入 ------------------------
export WATCH_FILE="/export/home/srdcs/embulk_test/log/bulkinsert_M_ORG.log"
export MAIL_CMD="/usr/sbin/sendmail"
export MAIL_TMP_FILE="/export/home/srdcs/embulk_test/mail/mail_tmp_file"
export CHECK_LOG="/export/home/srdcs/embulk_test/mail/check.log"
export MAIL_LIST="/export/home/srdcs/embulk_test/mail/mail.list"
export ADDR="xxx@xxxx"
export ERROR_CODE_001="Error"
export TIME="`date '+%y/%m/%d %H:%M:%S'`"

#
# メールヘッダ部作成
#

echo "====================="    >> ${MAIL_TMP_FILE}
echo "DATE : ${TIME}"           >> ${MAIL_TMP_FILE}
echo "HOST : `hostname`"        >> ${MAIL_TMP_FILE}
echo "====================="    >> ${MAIL_TMP_FILE}
echo "Message:"                 >> ${MAIL_TMP_FILE}

while read line
do
cat ${WATCH_FILE} | grep "${ERROR_CODE_001}"
        if [ $? = "0" ];then
        echo "error occurred" >> ${MAIL_TMP_FILE}
        ${MAIL_CMD} -f embulk_xxxx@jp.xxxx.com ${ADDR} < ${MAIL_TMP_FILE}
        exit 1
        break;
        fi
done

●実行後送付されるメール

=====================
DATE : 19/03/04 16:35:49
HOST : xxxx
=====================
Message:
error occurred
===========
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • この投稿は削除されました

  • otn

    2019/03/01 09:50

    質問がその3点なら、本文を編集して追記してください。

    キャンセル

  • raccoondog

    2019/03/01 10:00

    質問内容を編集させて頂きました。

    キャンセル

回答 1

checkベストアンサー

+1

➀ログファイル監視のロジック部分(コーディング方法)がわからないです。

これは具体的に何をしたいのか不明なので何とも。

➁日付のセットについて

setenv TIME `date "+%y/%m/%d %H:%M:%S"`


の間違いですね。タイプミスなのか、そうじゃないのか。

➂sendmailコマンドのメール本文送付設定について

ちゃんとやるなら、MIME系のヘッダをファイルのヘッダ部分に入れておきます。

MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8


とか。

/bin/mailを使うと、そのあたりは、よろしくやってくれると思います。

echo "メール送信テスト" >> ${MAIL_TMP_FILE}
/bin/mail ${ADDR} < ${MAIL_TMP_FILE}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/01 10:10

    ご回答有難うございます。

    ➁につきまして

    setenv TIME `date "+%y/%m/%d %H:%M:%S"`

    では、やはり指定があいまいです。と言われてしまいます。

    echo `date "+%y/%m/%d %H:%M:%S"`

    19/03/01 10:06:28

    と正常に表示されるのですが、setenvできない状況となります。

    キャンセル

  • 2019/03/01 10:13

    Linuxのcsh(tcsh)だとそれでいけるのですが。

    setenv TIME "`date '+%y/%m/%d %H:%M:%S'`"
    でどうでしょうか。

    Solarisって、bashとかkshとかzshとか無いんでしたっけ?

    キャンセル

  • 2019/03/01 10:20

    ご回答有難うございます。
    上記手順で、設定できました。
    ➁につきましては、完了となります。

    キャンセル

  • 2019/03/01 10:27

    ➀の質問内容を更新させて頂きました。
    ご確認の程宜しくお願い致します。

    キャンセル

  • 2019/03/01 10:45 編集

    ➂につきまして、/bin/mailで対応したのですが、やはり文字化けしたメールが送信されてしまいました。

    1byteの英数字と記号は正常に表示
    2byteの日本語文字は文字化け

    します。

    キャンセル

  • 2019/03/01 10:55

    > ➀の質問内容を更新させて頂きました。

    cshの構文じゃないですけど??

    あと、
    > ➀ログファイル監視のロジック部分(コーディング方法)が~~~
    の文章ですが、抽象的で何を言ってるのかわからないので、「監視」という言葉を使わないで書き直してください。

    キャンセル

  • 2019/03/01 10:57

    > ➂につきまして、
    届いたメールの、メールヘッダを書いてください。
    また、メールは何で見ていますか?

    キャンセル

  • 2019/03/01 11:13

    > > ➂につきまして、
    > 届いたメールの、メールヘッダを書いてください。
    > また、メールは何で見ていますか?

    メールヘッダーを質問内容に記載させて頂きました。
    メールはoutlookになります。

    キャンセル

  • 2019/03/01 11:27

    >> ➀の質問内容を更新させて頂きました。
    >cshの構文じゃないですけど??
    >あと、
    >> ➀ログファイル監視のロジック部分(コーディング方法)が~~~
    >の文章ですが、抽象的で何を言ってるのかわからないので、「監視」という言葉を使わないで書き直してください。

    質問内容を更新させて頂きました。
    ご確認の程宜しくお願い致します。

    キャンセル

  • 2019/03/01 11:28

    スクリプト内の日本語はちゃんとUTF-8で書いていますか?

    キャンセル

  • 2019/03/01 11:55

    >スクリプト内の日本語はちゃんとUTF-8で書いていますか?

    ➂につきましては、日本語での記載はやめて、英数字記号のみとして回避させて頂きます。

    キャンセル

  • 2019/03/01 12:23

    > test.logファイルを特定の文字列(Error)で検索し、エラーがあった場合にエラー内容をメール送信させたい
    > ※前回検索した行以降としたいです。

    grep してファイルに保存し、前回分と差分を取ればいいかと思います。

    ログファイルを切り替えたときは、保存してある前回分を空にするのを忘れずに。

    キャンセル

  • 2019/03/01 16:56

    ご回答有難うございます。

    やはり、cshですと扱いづらいのでbashにいたします。

    実行させたいユーザのログインシェルがcshでして、実行させるのに

    /bin/bash /シェルスクリプト名

    では実行が出来ませんでした。
    シェルスクリプトは質問内容に記載させて頂きます。

    キャンセル

  • 2019/03/01 17:11

    > では実行が出来ませんでした。

    どうなるんですか?

    キャンセル

  • 2019/03/01 17:18

    cannot execute binary file

    と出力されました。

    キャンセル

  • 2019/03/01 17:21

    すみません。。

    #!/bin/bash

    を忘れていました。

    キャンセル

  • 2019/03/01 17:22

    実行すると

    tailの使用法について表示されます。
    文法あやまりがありそうです。

    キャンセル

  • 2019/03/01 17:26

    自分で考えて書いたのでなく、Linuxのコードのコピペなのなら、
    Linuxのコマンド群はGNU拡張で機能が拡張されているので、Solarisのマニュアルを読みながら書き直しましょう。

    キャンセル

  • 2019/03/04 16:41

    質問内容に、状況更新しました。

    処理が正常に動いていそうなんですが、メールが飛ばないです。。。

    キャンセル

  • 2019/03/04 16:46

    理解不能のコードです。
    各行について、この行はどういう意味があって書いているのか、理解していますか?

    キャンセル

  • 2019/03/04 16:57

    具体的に指摘すると、
    while read line
    は、何を意図して書いていますか?

    キャンセル

  • 2019/03/04 17:04

    監視対象のログファイルから、エラー文字列をキーにして検索させようとしています。

    キャンセル

  • 2019/03/04 17:08

    ↑これは何に対してのコメントですか?

    キャンセル

  • 2019/03/04 17:17

    >具体的に指摘すると、while read line は、何を意図して書いていますか?

    上記に対してのコメントとなります

    キャンセル

  • 2019/03/04 21:11

    while read line という記述で、ファイルから文字列を検索できると思っていると言うことですか?

    キャンセル

  • 2019/03/04 21:17

    その認識でいました。

    キャンセル

  • 2019/03/04 21:43 編集

    ちょっとまだ、自分でスクリプトを書くのはもちろん、他人の書いたスクリプトを読んだり、利用したりするレベルに達していないので、
    まずは、Linuxのコマンドライン操作の基本から学んではどうでしょうか?
    単独のコマンドの意味がわからないと、スクリプトは読めません。

    キャンセル

  • 2019/03/05 09:55

    ●2019/3/5の実行状況

    質問内容に、シェル開発状況を更新しました。
    プログラム実行後の動作を修正したいです。

    キャンセル

  • 2019/03/05 10:05 編集

    > プログラム実行時に、プロンプトがかえってこず

    while read line と書いているからです。
    まずは、Linuxのコマンドライン操作の基本から学んではどうでしょうか?

    キャンセル

同じタグがついた質問を見る

  • cron

    214questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

  • Sendmail

    43questions

    Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

  • csh

    23questions

    cshは、C言語スタイルの構文を持つUNIX系OSのシェルの1つのことです。

  • Solaris

    18questions

    Solarisは、SunSoft社が開発・販売を行っているUnix系のOSです。Sun Microsystems社製コンピュータで動作し、またPC/AT互換機で動作するバージョンもあります。旧名称は「SunOS」ですが、現在はSolarisのカーネル部分をSunOSと呼んでいます。