Сценарий оболочки для уведомления о достижении порогового значения времени работы сервера

Я хочу очистить следующий сценарий оболочки, который считывается во время безотказной работы сервера 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" "[email protected]"

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

person G_Homz    schedule 18.04.2020    source источник


Ответы (1)


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

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

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

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

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

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

hostname -f команда распечатать полное доменное имя

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

uptime | awk '{print $3,$4}' | sed 's/,//' | mail -s "Server Needs To Be Rebooted" "[email protected]"

person GuBo    schedule 18.04.2020