قطع خودکار کاربران در ISPmanager5 lite بدون BILLmanager

داده شده:

  1. سرور VPS با مجوز دائمی ispmanager lite 5
  2. 10-20 کاربر در هر سرور
  3. Google Calendar با یادآوری های منظم برای کسانی که میزبانی آنها تمام شده است
  4. حیف است برای هر چیز دیگری بپردازید، مخصوصاً با اشتراک.

هدف خلاص شدن از شر تقویم گوگل و یادآوری های دستی به مشتری است که باید برای میزبانی هزینه پرداخت کند. خود را از "اجازه دهید کمی بیشتر کار کند، او به زودی پرداخت می کند" را آزاد کنید، "خاموش کردن آن به نوعی ناخوشایند است" و این را به یک دستگاه بی روح بسپارید.

البته من اول تو گوگل سرچ کردم ولی راه حلی پیدا نکردم، همه چی خلاصه شد به این که باید عضو BILLmanager بشی، ولی نقطه 4 برام خیلی مهم و جدیه، نمیگیرم. از شر آن خلاص شوید. و معلوم شد که تصمیم چندان دشوار نیست.

پس چه کنیم؟

یک پوشه users.addon، در پوشه /usr/local/mgr5/etc/sql/، دو فایل خالی ایجاد کنید:

  1. تاریخ پرداخت
  2. uwemail

این به پنل دستور می دهد تا در پایگاه داده ایجاد کند
/usr/local/mgr5/etc/ispmgr.db
در جدول کاربران دو فیلد متناظر وجود دارد که مقادیر پنل مدیریت در آن نوشته می شود.

یک فایل به نام 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

در فیلدها می نویسیم تا چه روزی هاستینگ باید کار کند و چه ایمیلی از کاربر، کجا یادآوری کنیم که هاست به زودی به پایان می رسد.

اکنون باید اسکریپتی ایجاد کنیم که به کاربران یادآوری کند که هاست در فواصل زمانی به پایان می رسد. به ادمین اطلاع دهید که میزبانی در حال پایان است. به کاربر و ادمین اطلاع دهید که کاربر غیرفعال شده است.

من 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 اضافه می کنیم تا یک بار در روز آن را فراخوانی کنیم. همه آماده است.

الان وجدانم آسوده است، وزغ راضی است و هزینه اضافی هم متحمل نشده ام.

تنها چیزی که باقی می ماند این است که داده های کاربرانی را که در آن تاریخ هزینه هاستینگ پرداخت شده است و ایمیل کاربران که در آن یادآوری برای کاربران ارسال می شود، وارد کنید.

خوشحال میشم اگه به ​​کسی کمک کنه

منبع: www.habr.com

اضافه کردن نظر