#!/usr/bin/perl # try this for the report # repquota /home|grep + use strict; use warnings; use Getopt::Std; use Mail::Sender; use Sys::Hostname; use Quota; my ($to, $x, $sender, @names, $size, $uid, $name, $passwd); my ($error, $user, $limit, $dev,$bc,$bs,$bh,$bt, $ic,$is,$ih,$it); my $gid = -1; my $members = "none"; my $smtp = "mail"; my $hostname = hostname; my $support = "vgsupport\@foodomain.com"; my $part = "/home"; #partition to check quotas my %opt; # the : following means that switch takes and arguement. getopts("u:l:seqc", \%opt); # print <<"*END*"; # u = $opt{u} # l = $opt{l} # s = $opt{s} # e = $opt{e} # q = $opt{q} # c = $opt{c} # *END* # target user if (defined $opt{u}){ $user = $opt{u}; # get uid $uid = getpwnam $user; }else{ $error = "You must specify a user"; usage(); } getquota(); # clear quota if (defined $opt{c}){ setquota(); exit; } # size limit in kilobytes if (defined $opt{l}){ $limit = $opt{l}; }else{ $error = "You must set a size limit"; usage(); } # check limit and take report if ($size > $limit) { # if match then print report to stdout if (defined $opt{s}){ report(); # or email owner a warning }elsif (defined $opt{e}){ $to = $user; email(); }else{ $error = "You must specify a report type"; usage(); } # set quota ? if (defined $opt{q}){ setquota(); } } # check usage sub usage { print "Error $error\n"; print "Usage: pqset -u <user> "; print "-l <quota limit in kilobytes> "; print "-s report to stdout "; print "-e send email to user "; print "-q set quota "; print "-c clear quota\n\n"; exit; } # write report to stdout sub report{ print <<"*END*"; Current disk usage is $size but limit is only $limit *END* } # send email warning sub email{ $sender = new Mail::Sender; $sender->Open({ smtp => $smtp, to => $to, from => "nobody\@foodomain.com", encoding => "quoted-printable", subject => "Computer operations: Your disk usage on $hostname" +, }) or die "Sender error: $sender, $Mail::Sender::Error!\n"; $sender->SendEnc(<<"*END*"); Your disk usage on $hostname has exceeded the allowed limit. Current size (kilobytes): $size Allowable limite (kilobytes): $limit Please reduce your usage to below the allowed limit. Your write privil +eges on this server have been revoked. If you have any questions or concerns please email $support. Do NOT r +eply to this email. Thank you. *END* $sender->Close or die "Sender error: $sender, $Mail::Sender::Error +!\n"; } # set disk quota for offenders sub setquota{ # definitions # $bc = block count # $ic = inode count # $bs = soft block limit # $is = soft inode limit # $bh = hard block limit # $ih = hard inode limit # $bt = block grace time # $it = inode grace time if (defined $opt{c}){ # clear quota $limit = 0; Quota::setqlim($dev, $uid, $bs,$limit, $is,$ih); # || die Quot +a::strerr,"can't set quota $!\n"; print "Quota cleared for $user\n"; print "see quota $user\n"; }else{ # set quota to hard limit Quota::setqlim($dev, $uid, $bs,$limit, $is,$ih); # || die Quot +a::strerr,"can't set quota $!\n"; print "Quota set to $limit kilobytes for $user\n"; print "see quota $user\n"; } } # check current disk quotas for user sub getquota{ # not that the die seems to die even on success # thus I have commented them out, for now # get device $dev = Quota::getqcarg($part); # || die Quota::strerr,"can't get d +ev $!\n"; #$dev = Quota::getdev($part) || die Quota::strerr,"can't get dev $ +!\n"; # get current quota #print "dev = $dev\n"; #print "uid = $uid\n"; ($bc,$bs,$bh,$bt, $ic,$is,$ih,$it) = Quota::query($dev, $uid); # | +| die Quota::strerr,"can't read quotas $!\n"; # definitions # $bc = block count # $ic = inode count # $bs = soft block limit # $is = soft inode limit # $bh = hard block limit # $ih = hard inode limit # $bt = block grace time # $it = inode grace time $size = $bc; }

In reply to pqset by neilwatson

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.