| |||||||
| Регистрация | Правила форума | Доска почета | Пожертвования | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
| Perl Perl-кодинг, советы и т.п. |
![]() |
|
| | LinkBack | Опции темы | Опции просмотра |
| | #1 (permalink) |
| Пользователь Регистрация: 13.05.2008
Сообщений: 68
Вы сказали Спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
![]() | появилась идея написать панельку для хостинга... рассказывать всё долго. Аналоги стоят не мало, cpanel, plesk ит.юд. от 400$ в год. а для jail 1500$ Мож кто пробавол написать уже, кто что думает по этому поводу? но написать реально, не так чтобы ели работало, а прием платежей и т.д.... кто сможет посмотреть и ошибка помочь исправить? |
| | |
| | #3 (permalink) | |||||||||||||||||||||||
| Пользователь Регистрация: 13.05.2008
Сообщений: 68
Вы сказали Спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
![]() | ну так а в чем проблема? в логи 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;
а чего оно стоит так дорого с веб интерфейсом? на преле можно сделать и покруче cpanel и все автоматизировать и чтобы само работало... | |||||||||||||||||||||||
| | |
| | #4 (permalink) |
| Пользователь Регистрация: 13.05.2008
Сообщений: 68
Вы сказали Спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
![]() | cooler, как думаешь писать пока только для себя? просто протестировать хорошо надо ![]() я хотел писать не только для себя... будет она кому-то нужна не понтяно...? надо чтобы кто-то помог протетировать и ошибки по исправлять... (дизайн - не умею... будут просто стыренные кнопочки и рамочки ) |
| | |
| | #8 (permalink) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| VIP :) |
могу организовать место тестов ![]()
все зависит от того что в ней будет ![]()
Если надо с этим могу помочь ...
__________________ чтобы единожды настроенный линукс упал надо обладать минусовым IQ и быть похожим на осьминога (восемь лап и все из жопы). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | |
| | #9 (permalink) | |||||||||||||||||||
| Пользователь Регистрация: 13.05.2008
Сообщений: 68
Вы сказали Спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
![]() |
а что вы хотите чтобы в ней было? если в ней что-то не будет, то можите напишите - можно добавить! вообще-то когда делать, то нужно знать зачем это делаеться... | |||||||||||||||||||
| | |
| | #10 (permalink) |
| Пользователь Регистрация: 13.05.2008
Сообщений: 68
Вы сказали Спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
![]() | появился вопрос, не знаю как правильно: 1) proftp и pureftp + MySQL, видел везде есть неограниченное количество аккаунтов для ftp, в общем не знаю как лучше сделать чтобы было больше одного аккаунта!! нужно добавлять пользователя в систему чтобы сделать еще один аккаунт!? Код: INSERT INTO `users_table` VALUES(2, 'wowa','sf3r4g88', 'ftp', '1000', '1000', '/usr/users/wowa', '/sbin/nologin',0,0,0,0) как на других панелей делаеться? как тут сделать чтобы было несколько аккаунтов ftp? 2) чтобы управлять dns наверное конфиги в файлах использовать не надо, нашел bind + MySQL, еще PowerDNS... прикручю наверное bind + MySQL Последний раз редактировалось CISCO, 23.08.2008 в 06:20. |
| | |
![]() |
|
| Опции темы | |
| Опции просмотра | |
| |