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 ===========
回答1件
あなたの回答
tips
プレビュー