CentOS release 6.5 (Final)
にて、監視するシェルを作成して実行しています(crontab)にて。
下記のシェルを実行すると、「No such file or directory」と表示され
意図したように実施できません。
■ログメッセージ内容
grep: ./systemMonitor.ini: No such file or directory /home/test/shell/mail/test.sh: line 46: [: ==: unary operator expected /home/test/shell/mail/stest.sh: line 56: [: ==: unary operator expected
■シェル内容(test.sh)
#!/bin/bash # ************************ # メールテンプレート # ************************ # メール宛先 mail_to='ABC@xx.xx.xxx.jp' mail_from='DEF@xx.xx.xxx.jp' # メール件名 mail_subject_failure='【障害通知】' mail_subject_recover='【復旧通知】' # メール本文 # 障害検知版 mail_content_failure='障害を検知しました。\n\n IP:xxx.xxx.xxx.xxx' # 障害復旧版 mail_content_recover='復旧しました。\n\n IP:xxx.xxx.xxx.xxx' # ************************ # 処理 # ************************ # システム設定から設定値を取得 # 設定ファイル内に初期値として「isSent:false」を登録していること!! isSent=$(grep isSent ./systemMonitor.ini) # 設定キー:設定値を":"でセパレートして設定値を取得 OIFS="$IFS"; IFS=':' isSent_array=($isSent); IFS="$OIFS" isSent=${isSent_array[1]} # --------------------- # 監視処理 # --------------------- # 監視処理を実行(レスポンスのコンテンツ取得結果から判定) # レスポンスに「200 OK」が含まれているか? # result=0:稼働停止、1:正常稼働 result=`wget --spider -nv https://xxx.xxx.xxx.xxx:3000/web/login.html --no-check-certificate 2>&1 | grep -c '200 OK'` # 「障害メールを送信済」 かつ 「サービスが復旧済」である場合 if [ ${isSent} == true ] && [ ${result} == 1 ]; then # メール送信(復旧通知) echo -e ${mail_content_recover} | mail -s ${mail_subject_recover} -r ${mail_from} ${mail_to} # メール送信済フラグをクリアへ更新 isSent=false; # iniファイルを更新 echo 'isSent:'${isSent} > ./systemMonitor.ini fi # 「障害メールを未送信」 かつ 「サービスが稼働停止」である場合 if [ ${isSent} == false ]; then if [ ${result} -ne 1 ]; then # メール送信(障害通知) echo -e ${mail_content_failure} | mail -s ${mail_subject_failure} -r ${mail_from} ${mail_to} # メール送信済フラグを送信済へ更新 isSent=true; # iniファイルを更新 echo 'isSent:'${isSent} > ./systemMonitor.ini fi fi
「test.sh」と「systemMonitor.ini」は同一ディレクトリにあります。
2つのファイルがある場所「/home/test/shell/mail」にて
「 grep isSent ./systemMonitor.ini」を実施すると、
「isSent:false」とファイルの中身を表示する事ができます。
また、環境変数を調べると、
echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache2/bin:/root/bin
なので、「/bin」があるので、「/bin/bash」を実行する権限はあるように思えます。
シェルを実行して意図した結果を得るにはどうしたらいいでしょうか?
ご教授をお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。