В 2018 году столкнулся с проблемой, когда у пользователя закончились деньги на счету, в полночь его отключило, пользователь сразу сделал оплату, деньги списались и услуга включилась, а в час ночи его снова отключило, так как биллинг пытался еще раз снять абонплату. Просто выложу здесь простой скрипт, который позволяет получать уведомления на email со списком пользователей которые сделали оплату ночью между 00:00 и 01:01, чтобы потом можно было вручную откорректировать.
Содержимое скрипта:
mysql -D abills -u ixnfo -pPASSWORD -Bse "SELECT pay.* FROM internet_main im LEFT JOIN payments pay ON (pay.uid=im.uid) WHERE pay.date BETWEEN '$today' AND '$today 01:01:00' AND im.disable=5;"
Ключ -s позволяет выводить меньше информации, -B делает более читабельный вид, -e выполняет SQL запрос.
Скрипт я добавлял в /etc/crontab:
MAILTO=test@ixnfo.com
10 1 * * * root /scripts/check_pays_from_00_to_01.sh
Таким образом если скрипт ничего не находит, то письмо на email не придет, если находит, то придет root пользователю в 01:10.
Также я изменил дату в некоторых платежах чтобы они не попадали в вывод скрипта, эти платежи были добавлены при миграции с самописного биллинга:
SELECT * FROM payments LIMIT 300
SELECT * FROM payments WHERE date LIKE "0000-00-00%" LIMIT 300
SELECT * FROM payments WHERE date="0000-00-00 00:00:00" LIMIT 300
SELECT * FROM payments WHERE dsc="ABon compenstation" LIMIT 300
SELECT * FROM payments WHERE inner_describe="Migration" LIMIT 300
UPDATE payments SET date='2018-07-11 05:59:41' WHERE date="0000-00-00 00:00:00" AND dsc="ABon compenstation";
Смотрите также мои статьи:
Перенаправление почты пользователя root
Прочие мои статьи про ABillS