Exim: email limiting per day for a cpanel domain

Following section will give the details how you can set up this on exim.


cp /etc/exim.pl /etc/exim_limit.pl

2 change the following section of code in exim_limit.pl:

if ($maxmails > 0) {
my $nummailsinhour = readbacktohour(“/usr/local/apache/domlogs/$domain-smtpbytes_log”);
my $nummailsinday = readbacktodate(“/usr/local/apache/domlogs/$domain-smtpbytes_log”);
if ($nummailsinhour > 100) {
die “Domain $domain has exceeded the max emails per hour. Message discarded.\n”;
if ($nummailsinday > $maxmails) {
die “Domain $domain has exceeded the max emails per day. Message discarded.\n”;

3 change the following line in exim_limit.pl:

sub readbacktodate {


sub readbacktohour {

4 Add the following code after that in the same exim_limit.pl:
I mean after completion of subroutine readbacktohour

sub readbacktodate {
my($filename) = @_;
my($filepos) = 0;
my $now = time();
my $onedayago = ($now – (24*60*60));
my($hitcount) = 0;
= stat($filename);

$filepos = ($size – 4096);
while($filepos >= -4096) {
if ($filepos 0) {
$buf =~ /([^\n]+\n)/;
$filepos += length($1);
$buf = substr($buf,length($1));
my @BUF = split(/\n/, $buf);
foreach (reverse @BUF) {
my($ttime,$tbytes) = split(/ /);
if ($ttime > $onedayago) {

$filepos -= 4096;
if ($filepos > Server Configuration >> Tweak Settings, in the Mail section, the line ‘The maximum each domain can send out per hour’ is no longer a limit per hour but per day. That mean if you change these settings here it will only affect the maximum emails per day. We’ve hardly limited the number of emails per hour to 100 through the code “nummailsinhour > 100”

5 Go to Exim Configuration Editor, and switch to Advance Mode,
Then search for perl_startup

change the code corresponding to that code to

do ‘/etc/exim_limit.pl’

perl_startup = do ‘/etc/exim_limit.pl’

Save it up and Exim will restart automatically with the new changes.

Good luck!


Memmory out of error while using Yum

Error Message

Loaded plugins: fastestmirror, rhnplugin
Loading mirror speeds from cached hostfile
* cloudlinux-x86_64-server-5: cl-mirror.london.uk2.net
Excluding Packages in global exclude list
Traceback (most recent call last):
File “/usr/bin/yum”, line 29, in ?
yummain.user_main(sys.argv[1:], exit_code=True)
File “/usr/share/yum-cli/yummain.py”, line 309, in user_main
errcode = main(args)
File “/usr/share/yum-cli/yummain.py”, line 178, in main
result, resultmsgs = base.doCommands()
File “/usr/share/yum-cli/cli.py”, line 345, in doCommands
File “/usr/lib/python2.4/site-packages/yum/depsolve.py”, line 101, in _getTs
File “/usr/lib/python2.4/site-packages/yum/depsolve.py”, line 112, in _getTsIn fo
pkgSack = self.pkgSack
File “/usr/lib/python2.4/site-packages/yum/__init__.py”, line 662, in
pkgSack = property(fget=lambda self: self._getSacks(),
File “/usr/lib/python2.4/site-packages/yum/__init__.py”, line 508, in _getSack s
File “/usr/lib/python2.4/site-packages/yum/__init__.py”, line 1096, in exclude Packages
File “/usr/lib/python2.4/site-packages/yum/packageSack.py”, line 396, in retur nPackages
None, patterns, ignore_case)
File “/usr/lib/python2.4/site-packages/yum/packageSack.py”, line 482, in _comp uteAggregateListResult
sackResult = apply(method, args)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 1210, in retur nPackages
pkgobjlist = self._buildPkgObjList(repoid, patterns, ignore_case)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 44, in newFunc
return func(*args, **kwargs)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 1191, in _buil dPkgObjList
po = self._packageByKeyData(repo, x[‘pkgKey’], x)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 444, in _packa geByKeyData
po = self.pc(repo, data)
File “/usr/lib/python2.4/site-packages/yum/sqlitesack.py”, line 73, in __init_ _
self._loadedfiles = False
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File “/usr/lib64/python2.4/atexit.py”, line 24, in _run_exitfuncs
Error in sys.exitfunc:
Traceback (most recent call last):
File “/usr/lib64/python2.4/atexit.py”, line 30, in _run_exitfuncs
File “/usr/lib64/python2.4/traceback.py”, line 212, in print_exc
print_exception(etype, value, tb, limit, file)
File “/usr/lib64/python2.4/traceback.py”, line 125, in print_exception
print_tb(tb, limit, file)
File “/usr/lib64/python2.4/traceback.py”, line 69, in print_tb
line = linecache.getline(filename, lineno)
File “/usr/lib64/python2.4/linecache.py”, line 14, in getline
lines = getlines(filename)
File “/usr/lib64/python2.4/linecache.py”, line 40, in getlines
return updatecache(filename)
File “/usr/lib64/python2.4/linecache.py”, line 100, in updatecache
fp = open(fullname, ‘rU’)


# ulimit -a

The output for this will be obtained as :

root@server1 [~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 19
file size (blocks, -f) unlimited
pending signals (-i) 139264
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) 10000
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 15
virtual memory (kbytes, -v) 262144
file locks (-x) unlimited

The reason for such memory error is because of virtual memory and max. memory size. It should be unlimited, otherwise it will show memory error.
# ulimit -m unlimited
# ulimit -v unlimited

Then run Yum