En hier is de nieuwe versie dan:
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| #!/usr/bin/perl
# Dit script update de userquotas vanuit een MySQL-database
use DBI; # DBI is noodzakelijk om de database-connectie te maken
$mysql_server = ""; # MySQL server-hostname
$mysql_username = ""; # MySQL username
$mysql_password = ""; # MySQL password
$mysql_database = ""; # MySQL database
$mysql_user_fieldname = ""; # MySQL veldnaam met username
$mysql_quota_fieldname = ""; # MySQL veldnaam met quota
$mysql_table = ""; # MySQL tabelnaam
$setquota_pgrm = ""; # Path naar setquota-programma
$percentage = 0.9; # Vermenigvuldigingsfactor (<- mooi scrabblewoord!): hardquota * percentage = softquota
$dbh = DBI->connect("dbi:mysql::database=$mysql_database;host=$mysql_server",$mysql_username,$mysql_password) or die "Connectie-probleem: $DBI::errstr";
$sth = $dbh->prepare("SELECT $mysql_user_fieldname,$mysql_quota_fieldname FROM $mysql_table") or die "Prepare-probleem: $DBI::errstr";
$sth->execute() or die "Uitvoer-probleem: $DBI::errstr";
while (($username,$hardquota) = $sth->fetchrow_array) {
$hardquota*=1024; # omrekenen naar KiloBytes
$softquota=int($hardquota*$percentage);
`$setquota_pgrm -F vfsold -u $username $softquota $hardquota 0 0 -a`; # opties voor setquota eventueel aanpassen
}
$dbh->disconnect(); |
- Voor de perl-newbies (en uiteraard ook voor de gevorderden, aar die weten die zelf vaak wel): Op de eerste regel zorgen dat het path naar perl overeenkomt met jouw systeem
- Ik ben er vanuit gegaan dat de quota's in MB's in de database staan: dat is het makkelijkste voor de meeste mensen. Het script rekent het zelf even om naar KB's.
- $percentage is de omrekenfactur van de hardquota naar softquota. Ik hanteer zelf altijd dat de softquota = 90% van hardquota. Dit levert dus 0.9 als omrekenfactor op
- In de regel waar de quotas werkelijk ingesteld worden kun je uiteraard de opties aanpassen aan jouw systeem.
- Na het opslaan het script even chmodden naar 700 (alleen leesbaar en uitvoerbaar voor root). Alleen lezen is nodig omdat je username & password in het script staan
Verder is de DBI-package nodig. Deze installeer ja als volgt:
code:
1
2
3
| perl -MCPAN -e 'install DBI'
perl -MCPAN -e 'install DBI::DBD'
perl -MCPAN -e 'install DBD::mysql' |
Indien het de eerste keer is dat je op deze manier Perl-modules installeert, zul je nog e.e.a. moeten opgeven (zoals de server waar de boel gedownload moet worden). Dit is vrij eenvoudig omdat Perl je hier zelf al een vragenlijstje voor voorschotelt. Bij de laatste module zou je een foutmelding kunnen krijgen, waardoor de boel niet geinstalleerd wordt. Dit is waarschijnlijk doordat het test-script wat bij deze module zit er vanuit gaat dat het zonder password als root mag spelen op de database 'test'. Het simpelste is om tijdelijk je root-password uit te zetten. Het installeren zou moeten werken, maar ik heb zelf behoorlijk lopen rommelen om het geinstalleerd te krijgen, dus het installeren is onder voorbehoud.
Ik zelf draai dit script 1x per dag vanuit de cron, maar er zijn natuurlijk tal van mogelijkheden.
Voor vragen en opmerkingen kun je uiteraard even mailen.
[
Voor 34% gewijzigd door
jurri@n op 04-07-2003 10:51
]