BILLmanager を使用しない ISPManager5 lite でのユーザーの自動切断

月:

  1. 永久ライセンス ispmanager lite 5 付き VPS サーバー
  2. サーバーあたり 10 ~ 20 ユーザー
  3. ホスティングがなくなった人向けの定期的なリマインダーを備えた Google カレンダー
  4. 特にサブスクリプションの場合、他のものにお金を払うのは残念です。

目標は、Google カレンダーと、ホスティング料金を支払う必要があるクライアントへの手動リマインダーをなくすことです。 「すぐにお金を払ってくれるからもう少し働かせて」「電源を切るのはなんだか不便だ」ということから解放されて、魂のない機械に任せてみましょう。

もちろん、最初は Google で検索しましたが、解決策は見つかりませんでした。結局のところ、BILLmanager に登録する必要があるということになりましたが、ポイント 4 は私にとって非常に重要で深刻です。それを取り除きます。 そして、その決定はそれほど難しいものではないことが判明しました。

どうしようか?

/usr/local/mgr5/etc/sql/ ディレクトリにフォルダー users.addon を作成し、次の XNUMX つの空のファイルを作成します。

  1. 支払い日
  2. ウウェメール

これにより、データベースにパネルを作成するように指示されます。
/usr/local/mgr5/etc/ispmgr.db
ユーザーテーブルには、管理パネルからの値が書き込まれる XNUMX つの対応するフィールドがあります。

次の内容を含む 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

我々は得ます:

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 что бы данные удалялись через некоторое время, но мне это не нужно
}

このスクリプトを任意の場所に保存して任意の名前を付け、XNUMX 日に XNUMX 回呼び出す cron タスクを追加します。 すべて準備が整いました。

今では私の良心は明確になり、ヒキガエルも満足し、追加の費用は一切かかりませんでした。

残っているのは、ホスティング料金が支払われた日付と、ユーザーへのリマインダーの送信先となるユーザーの電子メールのデータをユーザーに入力することだけです。

誰かの役に立てば幸いです。

出所: habr.com

コメントを追加します