ОС: Ubuntu
Текущий сценарий: у меня есть сценарий bash, который планируется запустить ежедневно 12 вечера, только один раз в день. Он извлекает списки пользователей из таблицы mysql, чьи учетные записи истекают. Дата date и отключает их в разных таблицах mysql, а также отправляет оповещения по электронной почте.
Проблема: Иногда случается, что сценарий пропускает свое расписание либо из-за отказа сервера, либо перезагружается в 12 часов.
Поэтому я ищу некоторую логику/метод, который скрипт должен запускать каждый час, и он должен проверять следующее
Если он был выполнен сегодня успешно уже в 12 часов, то не RE-RUN, если он не был выполнен, тогда он должен выполнить скрипт при следующем запуске и повторно запустить за эту дату снова
Вам нужно сохранить состояние последнего успешного запуска. Я думаю, вы можете достичь двумя способами:
Создайте новую таблицу в mysql, чтобы сохранить эту информацию и сохранить последнее datetime
при успешном datetime
скрипта. Каждый 1-часовой скрипт просыпается и смотрит на эту временную метку, чтобы выполнить любые ожидающие действия.
Вы также можете сохранить эту информацию в какой-либо системной папке, например "/var/log/" или что-то, к чему у вашего приложения есть доступ, и вам нужно убедиться, что этот файл не будет удален при перезагрузке.
У вас есть эта логика в начале файла:
last_time_run = <fetch_from_db or persistant file>
current_time = <get_current_time>
if <already executed>; then
don't do anything and exit.
else
processed and do normal actions.
fi
# End of the script
Update the timestamp in table or db to indicate that for current day the processing is finished.