このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

シェルスクリプトの実行について このメッセージに返信する
日時: 2015/01/01(Thu) 14:34
名前: S.I
URL: http://ameblo.jp/hanju8888amb/
以下のShell SCriptを"端末"から実行するのとcrontabから実行するのとではメール本文の内容が違うのはなぜでしょうか?
ディスクの使用率をチェックしてしきい値以上になるとメールとログに出力する
スクリプトなのですが、手動で実行した場合
#./dfaleat_chk.sh
の結果とcrontabで実行した結果が異なってしまいます。
(手動で実行すると正常にメッセージが表示されますがcrontabだと表示されません)
理由と、改善案を教えていただけませんでしょうか?よろしくお願いします。
-------------------Sellここから-------------
#!/bin/sh
#
# --- dfaleart_chk.sh ---
# cron設定 1分ごとに実行
#*/1 * * * * /root/Shell/dfalert_chk.sh > /dev/null 2>&1

# Disk使用率がオーバーした際のメールの宛先指定
#
# MAILTO="[メールアドレス]"

MAILTO="root@localhost"

# ログ保存先
LOG="/var/log/process_check.log"

# タイムスタンプ設定
LOG_DATE=`date '+%Y/%m/%d %k:%M:%S'`

# 監視する使用率(100%=100)
# ※この使用率率以上になったら報告
#
# DMAX=[使用率]

DMAX=80

DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`

if [ $DVAL -gt $DMAX ]; then
echo $LOG_DATE "「/ Disk使用率」が閾値"["$DMAX"%]"を超えました。" >> $LOG
message="${message}「/ Disk使用率」が閾値"["$DMAX"%]"を超えました。"
#echo “"Disk usage alert: $DVAL %" |/bin/mail -s *** Disk Space Aleart! *** root
fi

#send mail
if [ -n "${message}" ]; then
mail -s "***ERROR**** dfalert_chk.sh Server Master" root << body
${message} .
body
fi

Shellここまで-----------------------------
crontabここから----------------------
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
*/1 * * * * root /root/Shell/dfalert_chk.sh
crontabここまで----------------------
記事編集 編集
Re: シェルスクリプトの実行について このメッセージに返信する
日時: 2015/01/01(Thu) 20:36
名前: 通りすがり
URL:
環境変数の違いじゃないかな?
http://hirobanex.net/article/2011/05/1304666536
記事編集 編集
Re: シェルスクリプトの実行について このメッセージに返信する
日時: 2015/01/02(Fri) 13:23
名前: Shoryu Asa
URL:
初心者なので間違ってるかもしれませんが、日本語のメールを送るみたいなので
以下が関係あるかも。

ここ http://www.logikdev.com/2010/02/02/locale-settings-for-your-cron-job/ を読むと
cronは別にロケールを設定しないとダメらしい(通常のロケールが設定されない)
上記link先では /etc/environment に設定する方法で解決しているようですが、
crontabまたはスクリプトそのものにLANG(LANG=ja_JP.UTF-8)を設定してもいいと思います。

localeが正しく設定されているかはcronでlocaleをファイルにでも出力して確認すると
分かると思います。
記事編集 編集
Re: シェルスクリプトの実行について このメッセージに返信する
日時: 2015/01/03(Sat) 16:56
名前: stranger
URL: http://ja.528p.com/
/etc/cron.dに設定ファイルを置いてみる
(ユーザ・グループ・パーミッションは root root 644)

HOME=/の記述をやめてみる
日本語の部分を英語にしてみる
ヒアドキュメントを echo に置き換えてみる
mailコマンドを絶対パスで指定してみる

追記
MAILTOを特定のアドレス(ユーザ)に指定したり
MAILTOを記述しないと
メールを送るスクリプトのメールと
そのスクリプトを実行したというメールが送られるので
MAILTO=""を設定してcronの実行メイルを送らないようにできます
crontabはcron全体の設定なのでデフォルトのままにしておき
rootで実行する、分刻みのcronはcron.dに置くのが良いと思います
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -