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

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

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

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

cron

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

csh

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

Solaris

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

Q&A

解決済

1回答

2622閲覧

solaris 11 bashで監視スクリプト

raccoondog

総合スコア79

Sendmail

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

cron

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

csh

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

Solaris

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

0グッド

0クリップ

投稿2019/02/28 07:45

編集2019/03/05 00:53

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 ===========

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

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

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

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

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

otn

2019/02/28 10:24

cshでスクリプトを書く人はほとんどいないと思いますが。。。 コマンドの実行結果が、$status で参照できる事を知っているのに、何が分からないのでしょうか?
raccoondog

2019/03/01 00:32 編集

ご回答有難うございます。 ➀ログファイル監視のロジック部分(コーディング方法)がわからないです。 ➁日付のセットについて 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} ⇒メール本文内容が文字化けします。。。
otn

2019/03/01 00:50

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

2019/03/01 01:00

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

回答1

0

ベストアンサー

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

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

➁日付のセットについて

csh

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

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

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

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

Plain

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

とか。

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

csh

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

投稿2019/03/01 00:59

otn

総合スコア85768

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

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

raccoondog

2019/03/01 01: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できない状況となります。
otn

2019/03/01 01:13

Linuxのcsh(tcsh)だとそれでいけるのですが。 setenv TIME "`date '+%y/%m/%d %H:%M:%S'`" でどうでしょうか。 Solarisって、bashとかkshとかzshとか無いんでしたっけ?
raccoondog

2019/03/01 01:20

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

2019/03/01 01:27

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

2019/03/01 01:50 編集

➂につきまして、/bin/mailで対応したのですが、やはり文字化けしたメールが送信されてしまいました。 1byteの英数字と記号は正常に表示 2byteの日本語文字は文字化け します。
otn

2019/03/01 01:55

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

2019/03/01 01:57

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

2019/03/01 02:13

> > ➂につきまして、 > 届いたメールの、メールヘッダを書いてください。 > また、メールは何で見ていますか? メールヘッダーを質問内容に記載させて頂きました。 メールはoutlookになります。
raccoondog

2019/03/01 02:27

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

2019/03/01 02:28

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

2019/03/01 02:55

>スクリプト内の日本語はちゃんとUTF-8で書いていますか? ➂につきましては、日本語での記載はやめて、英数字記号のみとして回避させて頂きます。
otn

2019/03/01 03:23

> test.logファイルを特定の文字列(Error)で検索し、エラーがあった場合にエラー内容をメール送信させたい > ※前回検索した行以降としたいです。 grep してファイルに保存し、前回分と差分を取ればいいかと思います。 ログファイルを切り替えたときは、保存してある前回分を空にするのを忘れずに。
raccoondog

2019/03/01 07:56

ご回答有難うございます。 やはり、cshですと扱いづらいのでbashにいたします。 実行させたいユーザのログインシェルがcshでして、実行させるのに /bin/bash /シェルスクリプト名 では実行が出来ませんでした。 シェルスクリプトは質問内容に記載させて頂きます。
otn

2019/03/01 08:11

> では実行が出来ませんでした。 どうなるんですか?
raccoondog

2019/03/01 08:18

cannot execute binary file と出力されました。
raccoondog

2019/03/01 08:21

すみません。。 #!/bin/bash を忘れていました。
raccoondog

2019/03/01 08:22

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

2019/03/01 08:26

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

2019/03/04 07:41

質問内容に、状況更新しました。 処理が正常に動いていそうなんですが、メールが飛ばないです。。。
otn

2019/03/04 07:46

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

2019/03/04 07:57

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

2019/03/04 08:04

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

2019/03/04 08:08

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

2019/03/04 08:17

>具体的に指摘すると、while read line は、何を意図して書いていますか? 上記に対してのコメントとなります
otn

2019/03/04 12:11

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

2019/03/04 12:17

その認識でいました。
otn

2019/03/04 12:46 編集

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

2019/03/05 00:55

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

2019/03/05 01:05 編集

> プログラム実行時に、プロンプトがかえってこず while read line と書いているからです。 まずは、Linuxのコマンドライン操作の基本から学んではどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問