Я записал сценарий, который держит для слова в журнале и посылает электронное письмо, если то слово (ошибка) будет найдено, выполнения сценария каждый час и если то слово (ошибка) будет найдено, то это будет там один день, и на следующий день журнал запускается снова, и ошибка не может быть найдена.
Таким образом, сценарий, работающий каждый час, посылает мне каждый час то же электронное письмо, если та ошибка найдена, как я могу прекратить отправлять после 2 раза или только в один раз.
if grep 'error' "/path to log"; then
echo "error found" | mailx -s "error alert" email-id
fi
Вы можете использовать второе условие, которое использует некоторую переменную (или файл) в качестве флага (или счетчика).
Например, чтобы использовать файл в качестве флага, вы можете изменить свой скрипт следующим образом:
#!/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
, где пользователь, выполняющий сценарий, имеет права на запись.