Сценарий оболочки, чтобы уведомить, когда время работы сервера достигло порога - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь очистить следующий сценарий оболочки, который читает во время работы сервера Linux и отправляет по почте определенному пользователю, когда порог будет достигнут, чтобы мы знали, когда перезагружаться через ежедневное задание cron. Ниже будет показано время работы и вывод результата в файл, который затем будет отправлен по электронной почте. Я также хотел бы добавить в имя хоста сервера либо отчет, либо заголовок письма. Довольно плохо знаком с сценариями оболочки, поэтому любые / все советы приветствуются. Спасибо!

#!/bin/bash
timeup () { uptime | awk  '{print $3}'; }
UPTIME=100
if [ $(timeup) -ge $UPTIME ]; then

    #output uptime to report
    uptime | awk '{print $3,$4}' | sed 's/,//' >> /opt/scripts/report.out 

    #mail report 
    cat /opt/scripts/report.out | mail -s "Server Needs To Be Rebooted" "your@emailaddress.com"

    #remove old file
    rm -f /opt/scripts/report.out   
fi

1 Ответ

0 голосов
/ 18 апреля 2020

timeup () { uptime | awk '{print $3}'; } результат будет примерно таким: " 45: 45, ". Есть 2 проблемы с этим:

  • возвращаемое значение будет строкой, а не целым числом, поэтому если строка отправит сообщение об ошибке
  • "," знак на и из строки

Это лучше (но не так приятно :)): timeup () { uptime | awk '{print $3}' | awk -F\: '{print $1}';}

Вторая команда awk делит часы и минуты и печатает только часы.

Я предпочитаю сценарий sendEmail вместо команды mail: http://manpages.ubuntu.com/manpages/xenial/man1/sendEmail.1.html

Я бы поставил имя хоста в теме: "Server Needs To Be Rebooted: $(hostname -f)"

hostname -f команда print FQDN

Вы можете объединить uptime ... и mail командные строки и удалить rm команда:

uptime | awk '{print $3,$4}' | sed 's/,//' | mail -s "Server Needs To Be Rebooted" "your@emailaddress.com"

...