Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376621
  • 博文数量: 165
  • 博客积分: 436
  • 博客等级: 下士
  • 技术积分: 887
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-10 02:49
文章分类

全部博文(165)

文章存档

2012年(95)

2011年(70)

分类:

2011-11-20 18:50:07

原文地址:postfix中的命令行工具 作者:shibaolan


sendmail兼容的命令行工具

1. mailq 对邮件队列文件进行列表。表中的每一个条目包含有以下信息:   队列文件ID、邮件的大小、到达的时间、发件人、收件人和投递延迟的原因(如果投递有延迟的话)。该命令主要是与showq后台程序来获取队列文件的相关信息。该命令无参数。

2. newaliases 该工具进行别名数据库的初始化。如果没有指定数据库的类型,则使用系统默认的数据库类型(在linux下为hash)。该命令可以不带参数执行。

1. postcat 打印邮件队列文件的内容。后面界要显示的队列文件名,可以带一个-v的参数进行冗余显示。

2. postconf 打印配置参数设置后的值或postfix的其他信息。    -d 打印配置参数的缺省值。    -m 列出所有支持的查询表类型,不带参数则打印配置参数设置后的值。

3. postmap 建立postfix查询数据库。在linux下可以直接跟上原始文件而不带任何参数来建立该数据库。

4.postalias 创建或查询别名数据库。

5.postdrop 将邮件放回到maildrop/目录,由postfix重新进行投递操作。

6.postfix 启动或停止postfix系统,或重新读取配置文件。也可以用于其他维护工作,包括检查系统配置,以及清空队列。

7.postkick 对特定postfix服务发出请求。此工具的作用,主要是给shell scripts提供一个能够与postfix沟通服务的管道。

8.postlock 锁定特定文件,确保能够独占访问。此工具的作用,主要是让shell scripts能使用兼容于postfix的锁定方式。

9.postlog 将指定的信息记录到系统日志文件中。这是支持shell scripts工具,使其能以类似于postfix的样式来记录信息到日志文件。

10.postmap.创建查询表的DB数据库或查询查询表内容。postfix有许多配置信息都是记录在postmap所建的查询表数据库中。

11.postqueue让一般用户能够有限度的访问postfix队列。可能改变队列的访问方式需要有管理员特权才能进行,而这方面的访问能力由postsuper命令提供。 postqueue -p 显示信件队列 postqueue -f 全部扫清队列

12.postsuper 供管理员访问postfix队列。管理员可删除邮件、扣留邮件(搬到hold队列)、取回邮件(将邮件从hold队列搬回active队列),必要时,还可以修复队列目录结构。 postsuper -d Queue_ID 删除个别队列 postsuper -d ALL 删除全部队列 postsuper -h Queue_ID 扣住信件 postsuper -H Queue_ID 回复信件 postsuper -r Queue_ID 重进排队 postsuper -r ALL 重进排队

清理队列

今天有同事反映发邮件速度慢,登录了邮件服务器的后台看一下(我们的邮件服务器是postfix+dovecot+mysql+extmail+extman
搭建的基于mysql的虚拟用户),队列已经达到8万多

邮件队列已经达到了80000封,然后我看了一下负载,已经达到20多了…….
大家都清楚负载一旦达到这个数值,服务器的性能肯定已经相当差了。这里就有问题了,队列这么多如何清理呢?
如果是把队列全部清除的话很简单:postsuper –d ALL 就ok了。但是这样操作会产生很多问题,有的正常的还没有发送的队列也会被清掉;
假如一个一个的清理,那太要命了,怎么办呢?我用postqueue –p查看了一下,发现队列里的日期的两个特点,一是日期排列不规律,
第二个特点是日期只有最近5天的。Ok,有办法了。
这是我写的一个脚本:
#!/bin/bash
/usr/sbin/postqueue -p|egrep '(Nov 8|Nov 9)' > queue1.txt
/usr/sbin/postqueue -p|egrep '(Nov 8|Nov 9)'|awk '{print $1}' > queue2.txt
for i in `cat /root/queue2.txt`
do 
/usr/sbin/postsuper -d $i
done
这个脚本的作用是把队列当中日期为8号和9号的的队列写到一个文件queue1.txt(包含日期等信息),queue2.txt(只包含队列号);
然后用一个for循环来把queue2.txt里面的所有的队列都清除掉。执行完脚本,过几分钟再看队列已经不到1万了(最近两天的队列没有清除)

Ok,队列少了很多,而且服务器的负载也已经小于5了。

看被Queue的信:

postqueue -q (我都是用這個)

or

mailq


強迫將Queue信寄出:

postqueue -f


刪除所有被Queue的信:

postsuper -d ALL


刪除某封Queue的信:

先用postqueue -q or mailq

查queue_id

postsuper -d queue_id


刪除所有正在 deferred 佇列中的郵件 ( 刪除曾經發送失敗的信 ):

postsuper -d ALL deferred


刪除所有正在 deferred 佇列中的郵件 ( 可看出哪些信被刪除了 ):

find /var/spool/postfix/deferred -type f -exec rm -vf {} ;


刪掉「三天以前」無法發出的郵件:

find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f {} ;


列出目前所有無法發出的郵件:

find /var/spool/postfix/deferred -type f -exec ls -l --time-style=+%Y-%m-%d_%H:%M:%S {} ;


刪除超過 5 天的 "defer" 佇列中的退信紀錄:

find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f {} ;

阅读(1583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~