크론 작업에서 빈 이메일을 보냅니다.

크론 작업에서 빈 이메일을 보냅니다.

나는 모든 서버에서 NTP 서비스를 확인하고 그 결과를 특정 이메일로 보내는 쉘 스크립트를 작성했습니다. 수동으로 실행하면 제대로 작동하고 유효한 콘텐츠가 포함된 이메일을 받습니다.

그러나 동일한 사용자에 대해 cronjob에 넣으면 빈 이메일이 전송됩니다. cronjob을 실행했을 때 파일에 /tmp/ntp_status.txt어떤 정보도 저장되지 않은 것으로 나타났습니다. 그러나 수동으로 실행하면 세부 정보가 업데이트됩니다. 무엇이 누락되었는지 알 수 없습니다. 루트 사용자에 대해 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 오프셋 모니터링 및 측정을 구현합니다. 이를 그래프로 표시하고 특정 임계값을 기준으로 알림을 트리거합니다.

  • 구성 관리 소프트웨어를 사용하여 서비스 상태를 확인하세요.

관련 정보