Автоматичне відключення користувачів у ISPManager5 lite без BILLmanager

дано:

  1. VPS Сервер з вічною ліцензією ispmanager lite 5
  2. 10-20 користувачів на сервері
  3. Google Calendar з регулярними нагадуваннями у кого закінчився хостинг
  4. Дужа жаба платити за що-небудь ще, тим більше на підписці

Мета, позбутися google календаря та ручних нагадуваннях клієнту про те, що потрібно оплатити хостинг. Позбавити себе від «нехай ще трохи попрацює він скоро оплатить» «якось не зручно відключати», і доручити це вирішувати бездушній машині.

Звичайно ж спочатку погуглил пошукав, але не знайшов рішень все зводилося до того, що потрібно взяти підписку BILLmanager, але пункт №4 у мене дуже важливий і серйозний, його позбуватися не буду. Та й рішення виявилося не таким уже й складним.

Отже, що робимо.

Створюємо папку users.addon, в директорії /usr/local/mgr5/etc/sql/, два порожні файли:

  1. pay_date
  2. uwemail

Це дасть команду панелі створити у базі
/usr/local/mgr5/etc/ispmgr.db
у таблиці users два відповідні поля куди будуть писатися значення з адмін панелі.

Створюємо файл файл ispmgr_mod_pay_data.xml у папці /usr/local/mgr5/etc/xmlз вмістом

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
	<metadata name="user.edit">
		<form>
			<page name="main">
				<field name="pay_date">
					<input type="text" name="pay_date"/>
				</field>
				<field name="uwemail">
					<input type="text" name="uwemail"/>
				</field>
			</page>
		</form>
	</metadata>
	<lang name="ru">
		<messages name="user.edit">
			<msg name="pay_date" sqlname="pay_date">Оплачено до</msg>
			<msg name="uwemail" sqlname="uwemail">Пользовательский email</msg>
		</messages>
	</lang>	
	<lang name="en">
		<messages name="user.edit">
			<msg name="pay_date" sqlname="pay_date">Paid before</msg>
			<msg name="uwemail" sqlname="uwemail">User email</msg>
		</messages>
	</lang>
</mgrdata>

Це дає правило панелі, щоб наші поля відображалися у формі редагування користувача.

Перезавантажуємо панель:

/usr/local/mgr5/sbin/mgrctl -m ispmgr exit

отримуємо:

Автоматичне відключення користувачів у ISPManager5 lite без BILLmanager

У поля пишемо до якого дня повинен хостинг працювати, і який email користувача, куди надсилати нагадування про те, що скоро закінчиться хостинг.

Тепер потрібно створити скрипт, який буде нагадувати користувачам про те, що хостинг закінчується з деякою періодичністю. Повідомляти адміна про те, що хостинг закінчується. Повідомляти користувача та адміна про те, що користувач вимкнено.

Мені близький php на ньому та написав скрипт.

<?php
$adminemail = "[email protected]"; // email админа
$day_send_message = [30,7,5,3,1]; // за сколько дней и с какой переодичностью будет напоминать пользователю что хостинг заканчивается
$db = new SQLite3('/usr/local/mgr5/etc/ispmgr.db');
$results = $db->query('SELECT * FROM users WHERE active == "on" AND pay_date IS NOT NULL');
while ($user = $results->fetchArray()) {
		$days_left=floor( ( strtotime($user['pay_date']) - time() ) / (60 * 60 * 24));
		if(in_array($days_left, $day_send_message)){
			if($user['uwemail'] != ""){
				mail($user['uwemail'], 'ISPMANAGER заканчивается хостинг через '.$days_left.' днейя', "Текст для пользователя о том что осталось столько то дней");
			}
		}
		if( $days_left == 3 ) {
			mail($adminemail, 'ISPMANAGER USER '.$user['name'], $user['name'] . " Закончится хостинг через ".$days_left." дня");
		}
		if($days_left <= 0){
			mail($adminemail, 'ISPMANAGER USER '.$user['name'].' DISABLED', $user['name'].' Отключен');
			exec("/usr/local/mgr5/sbin/mgrctl -m ispmgr user.suspend elid=".$user["name"]);
			if( $user['uwemail'] != "" ) {
				mail($user['uwemail'], 'ISPMANAGER хостинг отключен', 'Текст для пользователя что хостинг закончился'); 
			}
		}
		// при желании можно еще написать небольшой IF что бы данные удалялись через некоторое время, но мне это не нужно
}

Цей скрипт зберігаємо куди завгодно і називаємо як завгодно, додаємо до cron завдання для виклику його раз на добу. Все готово.

Тепер совість чиста, жаба задоволена, додаткових витрат не зазнав.

Залишилося заповнити даними в користувачів до якої дати оплачено хостинг, і email користувачів куди надсилати нагадування користувачам.

Радий якщо комусь допоможе.

Джерело: habr.com

Додати коментар або відгук