没有 BILLmanager 的 ISPManager5 lite 中自动断开用户连接

给定:

  1. 具有永久许可证的 VPS 服务器 ispmanager lite 5
  2. 每台服务器 10-20 个用户
  3. Google 日历会定期提醒那些空间不足的用户
  4. 支付其他任何费用都是一种耻辱,尤其是订阅。

目标是摆脱谷歌日历和手动提醒客户需要支付托管费用。 把自己从“让他多干一点,他很快就会付款”、“关掉有点不方便”中解脱出来,把它托付给一台没有灵魂的机器。

当然,我首先谷歌搜索,但没有找到任何解决方案,这一切都归结为你需要订阅BILLmanager,但第4点对我来说非常重要和严肃,我不会得到摆脱它。 事实证明,这个决定并不那么困难。

那么我们该怎么办?

在/usr/local/mgr5/etc/sql/目录下创建文件夹users.addon,两个空文件:

  1. 发薪日期
  2. 邮箱

这将命令面板在数据库中创建
/usr/local/mgr5/etc/ispmgr.db
在用户表中有两个相应的字段,其中将写入管理面板中的值。

在 /usr/local/mgr5/etc/xml 文件夹中创建一个名为 ispmgr_mod_pay_data.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

我们得到:

没有 BILLmanager 的 ISPManager5 lite 中自动断开用户连接

在字段中,我们写下托管应在哪一天开始工作,以及用户的电子邮件地址,向何处发送托管即将结束的提醒。

现在我们需要创建一个脚本来提醒用户托管会在某些时间间隔结束。 通知管理员托管即将结束。 通知用户和管理员该用户已被禁用。

我喜欢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 任务以每天调用它一次。 一切准备就绪。

现在我的良心清白了,蟾蜍也满意了,我也没有再产生任何额外的费用。

剩下的就是在用户中填写支付托管费用的日期的数据,以及向用户发送提醒的用户电子邮件地址。

如果它对某人有帮助,我很高兴。

来源: habr.com

添加评论