Показать сообщение отдельно
Старый 24.06.2008, 12:21   #3 (permalink)
Пользователь
 
Регистрация: 13.05.2008
Сообщений: 72
Вы сказали Спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
CISCO на пути к лучшему
По умолчанию

ну так а в чем проблема?

в логи 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;
Цитата:
Сообщение от cooler Посмотреть сообщение
Там весь хостинг состоял из 4-5 скриптов

а чего оно стоит так дорого с веб интерфейсом? на преле можно сделать и покруче cpanel и все автоматизировать и чтобы само работало...
CISCO вне форума   Ответить с цитированием