クローンジョブから空のメールを送信します。

クローンジョブから空のメールを送信します。

私はすべてのサーバーでNTPサービスを確認し、その結果を特定の電子メールで送信するシェルスクリプトを作成しました。手動で実行すると、正常に機能し、有効なコンテンツを含む電子メールが届きます。

ただし、同じユーザーに対してcronjobに入れると、空のメールが送信されます。 cronjobを実行すると、ファイルに/tmp/ntp_status.txt情報が保存されていないことがわかりました。ただし、手動で実行すると詳細が更新されます。何が欠けているのかわかりません。 rootユーザーに対してcronjobを予約しても、同じ問題がまだ存在します。以下は私のスクリプトとcrontabエントリです。

0 12 * * * /root/test/servers_list/ntp.test.sh

#!/bin/bash
USR="root"

# Email
SUBJECT="NTP Service Status Report"
EMAIL="[email protected]"
EMAILMESSAGE="/tmp/ntp_status.txt"

# create new file
>$EMAILMESSAGE

# connect each host and pull up user listing
for host in `cat SAP_Prod_servers_51`
do
echo "--------------------------------" >>$EMAILMESSAGE
echo "* HOST: $host " >>$EMAILMESSAGE
echo "--------------------------------" >>$EMAILMESSAGE
ssh $USR@$host "UP=$(ps -ef | grep -v grep | grep ntpd | wc -l);
if [ "$UP" -ne 1 ];
then
        echo "NTP is down.";
        sudo service ntpd start

else
        echo "NTP Service is running.";
fi" >> $EMAILMESSAGE
done

# send an email using /bin/mail
/bin/mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

答え1

これが可能かどうかはわかりません。これは、sshパラメータ(コマンド)の最初の二重引用符が[]の場合、内部でエスケープされずに終了するためです。そこのエコにも同様に適用されます。

スクリプトを少し単純化しました。しかし、テストされていません。

#!/bin/bash
USR="root"
FILE=/full/path/to/file/change/this/SAP_Prod_servers_51

# Email
SUBJECT="NTP Service Status Report"
EMAIL="[email protected]"

for host in $(cat "$FILE")
do
  echo "--------------------------------"
  echo "* HOST: $host "
  echo "--------------------------------"
  ssh $USR@$host "
    if pgrep ntpd >/dev/null
    then
      echo 'NTP Service is running.'
    else
        echo 'NTP is down.'
        sudo service ntpd start
    fi
  " 2>&1
done | /bin/mail -s "$SUBJECT" "$EMAIL"

注:ntpdを実行しても時間が正しく同期されるわけではありません。

これらのサーバーに失敗したサービスを開始する機能があるsystemd場合。systemd

また、以下を考慮してください。

  • ntp オフセット監視と測定を実装します。これをグラフで表示し、特定のしきい値に基づいて通知をトリガーします。

  • 構成管理ソフトウェアを使用してサービスの状態を確認してください。

関連情報