BILLmanager ์—†์ด ISPManager5 lite์—์„œ ์‚ฌ์šฉ์ž ์ž๋™ ์—ฐ๊ฒฐ ํ•ด์ œ

๊ฐ์•ˆํ•  ๋•Œ :

  1. ์˜๊ตฌ ๋ผ์ด์„ผ์Šค๊ฐ€ ์žˆ๋Š” VPS ์„œ๋ฒ„ ispmanager lite 5
  2. ์„œ๋ฒ„๋‹น ์‚ฌ์šฉ์ž 10~20๋ช…
  3. ํ˜ธ์ŠคํŒ…์ด ๋ถ€์กฑํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ •๊ธฐ์ ์œผ๋กœ ์•Œ๋ฆผ์„ ์ œ๊ณตํ•˜๋Š” Google ์บ˜๋ฆฐ๋”
  4. ํŠนํžˆ ๊ตฌ๋…์„ ํ†ตํ•ด ๋‹ค๋ฅธ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.

๋ชฉํ‘œ๋Š” ํ˜ธ์ŠคํŒ… ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•œ๋‹ค๋Š” Google ์บ˜๋ฆฐ๋”์™€ ๊ณ ๊ฐ์—๊ฒŒ ์ˆ˜๋™์œผ๋กœ ์•Œ๋ฆฌ๋Š” ์•Œ๋ฆผ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. "์กฐ๊ธˆ๋งŒ ๋” ์ผํ•˜๊ฒŒ ๋†”๋‘๋ฉด ๊ณง ๋ˆ์„ ๊ฐš์„ ๊ฒƒ์ด๋‹ค", "๋„๋Š” ๊ฒŒ ์™ ์ง€ ๋ถˆํŽธํ•˜๋‹ค"๋Š” ์ƒ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์˜ํ˜ผ ์—†๋Š” ๊ธฐ๊ณ„์— ๋งก๊ธฐ์„ธ์š”.

๋ฌผ๋ก  ์ฒ˜์Œ์— Google์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ BILLmanager๋ฅผ ๊ตฌ๋…ํ•ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์š”์•ฝ๋˜์—ˆ์ง€๋งŒ 4 ๋ฒˆ ํ•ญ๋ชฉ์€ ๋‚˜์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•˜๊ณ  ์‹ฌ๊ฐํ•˜๋ฏ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ์ •์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ํ•ฉ๋‹ˆ๊นŒ?

/usr/local/mgr5/etc/sql/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‘ ๊ฐœ์˜ ๋นˆ ํŒŒ์ผ์ธ users.addon ํด๋”๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  1. ๊ธ‰์—ฌ์ผ
  2. ์ด๋ฉ”์ผ

์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒ์„ฑํ•˜๋„๋ก ํŒจ๋„์— ๋ช…๋ นํ•ฉ๋‹ˆ๋‹ค.
/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

์šฐ๋ฆฌ๋Š” ์–ป๋Š”๋‹ค :

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€