Сценарий оболочки, чтобы прекратить повторять ту же электронную почту, если уже когда-то найденный ошибкой и отправленный

Я записал сценарий, который держит для слова в журнале и посылает электронное письмо, если то слово (ошибка) будет найдено, выполнения сценария каждый час и если то слово (ошибка) будет найдено, то это будет там один день, и на следующий день журнал запускается снова, и ошибка не может быть найдена.

Таким образом, сценарий, работающий каждый час, посылает мне каждый час то же электронное письмо, если та ошибка найдена, как я могу прекратить отправлять после 2 раза или только в один раз.

if grep 'error' "/path to log"; then
    echo "error found" | mailx -s "error alert" email-id
fi
1
задан 29 January 2018 в 20:46

1 ответ

Вы можете использовать второе условие, которое использует некоторую переменную (или файл) в качестве флага (или счетчика).

Например, чтобы использовать файл в качестве флага, вы можете изменить свой скрипт следующим образом:

#!/bin/bash

FLAG_FILE="/tmp/flag_file_my_error_email_script"

if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ]; then
        echo "error found" | mailx -s "error alert" email-id
        touch "$FLAG_FILE"
fi

Команда touch "$FLAG_FILE" создаст файл /tmp/flag_file_my_error_email_script, который используется в качестве аргумента. во втором состоянии [ ! -f "${FLAG_FILE}" ]. Читайте о условных выражениях Bash .

Если вы хотите отправить / получить определенное количество писем, а затем отключить функцию скрипта, вы можете добавить третье условие, в котором содержимое $FLAG_FILE будет использоваться как counter : [ 1117]

#!/bin/bash

FLAG_FILE="/tmp/flag_file_my_error_email_script"

if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ] || (( $(cat "$FLAG_FILE") < 2 )); then
        echo "error found" | mailx -s "error alert" email-id
        touch "$FLAG_FILE"
        NEW_VALUE=$(( $(cat "$FLAG_FILE") + 1)) && echo "$NEW_VALUE" > "$FLAG_FILE"
fi

Обратите внимание, что && имеет значение , если предыдущее условие возвращает true , а || означает , если предыдущее условие возвращает ] ложным [+1121] .

Если вы хотите восстановить «нормальную» работу скрипта, вам следует удалить $FLAG_FILE. Этот файл будет автоматически удален при перезагрузке системы. Если вы хотите изменить это поведение, выберите каталог, отличный от /temp, где пользователь, выполняющий сценарий, имеет права на запись.

0
ответ дан 8 December 2019 в 02:32

Другие вопросы по тегам:

Похожие вопросы: