ну так а в чем проблема?
в логи ProFTP, apache, postfix кидают количесво байт, все это в таблицу и дальше осталось только подсчитать
ну вот чтобы не с пустыми руками, пуллер добавляет в систему, который я писал не доделан еще...
а как идея вообще? мож сделаем?
Код:
#!/usr/local/bin/perl
#use strict;
#use CGI qw(:standard);
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
#use CGI 'param','header';
use DBD::mysql;
use Math::Round qw(nearest);
use Image::Magick;
#use strict;
use warnings;
use CGI::Cookie;
use Storable;
use vars '$dbh', '%user_vars';
use CGI qw(param);
use POSIX;
use Digest::MD5 qw(md5_hex);
use Encode qw(encode_utf8);
use CGI qw/:standard/;
sub filelock {
flock(DB,2);
}
sub fileunlock {
flock(DB,8);
}
sub get_time {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$mon++;
$year+=1900;
if ($mday<10) { $mday="0$mday"; }
if ($mon<10) { $mon="0$mon"; }
if ($min<10) { $min="0$min"; }
$date="$mday $mon $year";
$time="$hour:$min:$sec";
$cur_all_day=$mday+$mon*30+$year*365;
}
&get_time;
$radate="$year-$mon-$mday $hour:$min:$sec";
#($sec,$min,$hour,$mday) = localtime(time);
#$radate=time;
sub logsave {
my $self = shift;
@logfile="
\n
time: $radate \n
vhost: $name \n
qhost: $qhost \n
erroe: $self\n
\n
";
open (DB2, "/var/log/httpd/hostingcron.log") || die print "Cannot open file $basefile: $!";
@base = <DB2>;
close(DB2);
open (DB, ">/var/log/httpd/hostingcron.log") || die print "Cannot open file $basefile: $!";
&filelock;
truncate(DB,0);
print DB @base;
print DB @logfile;
&fileunlock;
close(DB);
}
#datetimecur - posledmyaya izmenenaya
$dbh = DBI->connect("DBI:mysql:database=hosting_db;host=localhost","","", { RaiseError => 1, AutoCommit => 0 }) || die $DBI::errstr;
#my $ti= "1";
my $sth = $dbh->prepare("
SELECT MAX(datetimecur), MAX(datetime) FROM users limit 1
");
$sth->execute();
my ($maxdatetimecur, $maxdatetime) = $sth->fetchrow_array();
$sth->finish();
#if ($maxdatetimecur=$maxdatetime) {exit;}
print $maxdatetimecur;
print $maxdatetime;
($sec,$min,$hour,$mday) = localtime(time);
$ttt=time;
print "$ttt";
#and
my $sth = $dbh->prepare("
SELECT id FROM users where datetime = $maxdatetime limit 1
");
$sth->execute();
my ($date_id) = $sth->fetchrow_array();
$sth->finish();
#select name, pass from users where 1 < id and id <= 2;
my $sth = $dbh->prepare("
select name, pass, q from users where $maxdatetimecur < datetime and datetime <= $maxdatetime
");
$sth->execute();
#my ($login, $pass, $qhost) = $sth->fetchrow_array();
while ( ($login, $pass, $qhost) = $sth->fetchrow_array() ) {
$sth->finish();
$dbh->disconnect();
#proverka logina
my $Result = system("pw usershow $qhost");
if ($Result < 1) {
my $fff="erroe: 601 proverka logina\n";
&logsave($fff);
}
#dobavlenie polzovatelya
my $Result0 = system("pw useradd $qhost -c UserDomain = $login.q6.org.ua -L webuser -s /sbin/nologin -d /home/$qhost");
if ($Result0 < 1) {
my $fff="erroe: 602 pdobavlenie polzovatelya\n";
&logsave($fff);
}
my $Result1 = system("pw groupmod $qhost -m www");
if ($Result1 < 1) {
my $fff="erroe: 603 pdobavlenie grupu www\n";
&logsave($fff);
}
my $infouser9 = system("pw usershow $qhost");
if ($infouser9 < 1) {
my $fff="erroe: 610 ne polu4ilosya posmotret polzovatelya uid gid \n";
&logsave($fff);
}
my ($user, $grup, $uid, $gid,)=split(/\:/, $infouser);
#dobavlyaem polzovatelya v ftp
my $dbh = DBI->connect("DBI:mysql:database=ftp;host=localhost",) || die $DBI::errstr;
# готовим запрос
my $Resul2 = $dbh->prepare("INSERT INTO `users_table` ( username, password, groupname, uid, gid, homedir, shell, last_login, login_count, last_err_login, err_login_count) VALUES ('$qhost','$passs','$qhost','$uid','$gid','/home/$qhost','/sbin/nologin',0,0,0,0)");
$Result2->execute();
$sth->finish();
$dbh->disconnect();
if ($Result2 < 1) {
my $fff="erroe: 604 dobavlenie polzovatelya v ftp\n";
&logsave($fff);
}
if (-e /home/$qhost)
{
my $fff="erroe: 505 katalog suwestvuet\n";
&logsave($fff);
}
my $Result3 = system("mkdir /home/$qhost");
if ($Result3 < 1) {
my $fff="erroe: 605 ne sozdaetsay katalog\n";
&logsave($fff);
}
my $Result4 = system("cp -R /usr/local/www/home /home/$qhost");
if ($Result4 < 1) {
my $fff="erroe: 606 ne kopiruetsya katalogi\n";
&logsave($fff);
}
my $Result5 = system("chown -R $qhost:$qhost /home/$qhost");
if ($Result5 < 1) {
my $fff="erroe: 607 ne vistablyautsta prava\n";
&logsave($fff);
}
my $dbh = DBI->connect("DBI:mysql:database=mysql;host=localhost",) || die $DBI::errstr;
# готовим запрос
my $res = $dbh->prepare("CREATE DATABASE IF NOT EXISTS $qhost_db");
my $res2 = $dbh->prepare("GRANT ALL PRIVILEGES on $qhost.* to $qhost@localhost IDENTIFIED BY '$passs' ");
$res->execute();
$res2->execute();
# У вас эта ситуация может и не возникнуть.
$res->finish();
$res2->finish();
$dbh->disconnect();
@base="
<VirtualHost *:80>
ScriptAlias /cgi-bin \"/home/$qhost/www/cgi-bin\"
ServerAdmin @ukr.net
# AliasMatch ^/~([^/]+)(/.*)* /usr/home/$1/data$2
DocumentRoot /home/$qhost/www/data
ServerName $login.x0.org.ua
ServerAlias www.$login.x0.org.ua
SuexecUserGroup $qhost $qhost
Alias /php-fcgi/ /home/$qhost/www/cgi-bin/
CustomLog /home/$qhost/log/httpd-access.log combined
ErrorLog /home/$qhost/log/httpd-error.log
CBandClassLimit world 150M
CBandExceededSpeed 32 5 55
CBandSpeed 4096 20 60
CBandRemoteSpeed 512 6 6
CBandScoreboard /var/www/scoreboard
CBandPeriod 4W
</VirtualHost>";
if (-e /usr/local/etc/apache22/hosting/$login.conf)
{
my $fff="erroe: 506 file vhost suwestvuet\n";
&logsave($fff);
}
open (DB11, ">/usr/local/etc/apache22/hosting/$login.conf") || die print "Cannot open file $basefile: $!";
&filelock;
truncate(DB11,0);
# Записываем полученные данные в начало
# ($idd, $log, $passswd, $city, $emaill, $komm,$ip)=split(/\;/, $str);
#print DB "$id;$login\;$passwd\;$city\;$email\;$title\;$time\;$date\;$ip\;\n";
print DB11 @base;
&fileunlock;
close(DB11);
$fs="/usr/home";
$user_datasize="50";
#edquota -e $fs:$user_datasize:$user_datasize}:$user_inode}:${user_inode} ${user_name}
my $Result6 = system("edquota -e $fs:$user_datasize:$user_datasize $qhost");
if ($Result5 < 1) {
my $fff="erroe: 608 Ne postavilis kvoti\n";
&logsave($fff);
}
}
#posledniy dobavlennii
$dbh = DBI->connect("DBI:mysql:database=hosting_db;host=localhost",, { RaiseError => 1, AutoCommit => 0 }) || die $DBI::errstr;
my $result = $dbh->prepare("UPDATE users SET datetimecur = ? WHERE id = ?") || die "aw";
$result->execute($maxdatetime, $date_id);
$result->finish();
$dbh->disconnect();
exit;  | Цитата: |  | | | | | | | | | | | Там весь хостинг состоял из 4-5 скриптов | |  | |  | |
а чего оно стоит так дорого с веб интерфейсом? на преле можно сделать и покруче cpanel

и все автоматизировать и чтобы само работало...