邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 13381|回复: 3
打印 上一主题 下一主题

qmail的清除队列命令是什么啊?

[复制链接]
跳转到指定楼层
顶楼
发表于 2004-5-27 10:14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我知道用QMAIL-QSTAT来查看队列情况。
沙发
发表于 2004-7-16 12:12:48 | 只看该作者

Re:qmail的清除队列命令是什么啊?

停止QMAIL <br>
1.方法<br>
for i in `find /var/qmail/queue/ -type f`; <br>
do <br>
if [ $i = '/var/qmail/queue/lock/sendmutex' ];then <br>
ls $i <br>
else <br>
rm $i <br>
fi <br>
done <br>
注意sendmutex,这是一个空文件,但是如果没有的话,qmail会报错,小心 <br>
2。方法<br>
) 停止QMAIL <br>
2) mv /var/qmail/queue/lock /var/qmail/;find /var/qmail/queue/ -type f -exec rm {} \; ;mv /var/qmail/lock /var/qmail/queue/ <br>
3) 重启QMAIL. <br>
队列中的邮件包含在以下目录中 /var/qmail/queue/{info,mess,remote,local}/hash/#number <br>
<br>
<br>
试试看看:)
藤椅
发表于 2004-7-16 12:15:45 | 只看该作者

Re:qmail的清除队列命令是什么啊?

1.概述<br>
以下是qmail的数据流简图<br>
<br>qmail-smtpd --- >>qmail-queue --->> qmail-send <<--- qmail-rspawn <<--- qmail-remote<br>/ | <br>
qmail-inject _/ qmail-clean \_ qmail-lspawn <<--- qmail-local<br>
<br>qmail中,每一条消息都发送到中央队列等待发送,由qmail-queue进程控制。它在以下情况被调用:<br>1、当产生本地消息时,qmail-inject进程调用qmail-queue。<br>2、qmail-smtpd准备SMTP协议下的投递邮件任务时调用它。<br>3、向前(forwarded)发送邮件时,qmail-local调用它。<br>4、退回邮件时,qmail-send调用它。<br>
<br>每封邮件接着由qmail-lspawn 和qmail-rspawn协助qmail-sned进程完成投递,最后由qmail-clean清除邮件队列。这四个进程是系统由始至终都在运行的,十分重要。<br>
<br>qmail的队列被设计成很强的鲁棒性,并假定基础的文件系统也是强健的。所有的cleanups清除队列操作都由qmail-send独立控制,无须人为干预。详细请看第六部分。<br>
<br>
2. 队列结构<br>
<br>队列里的每条消息都由唯一的号码标识,假定某条消息是的标识码是457。队列被组织成几个目录,每个目录都可能包含和这条消息相关的文件: <br>
<br>mess/457: 消息正文<br>todo/457: 信封: 消息的来源地址和目的地址。实际是指向intd/457的链接。<br>intd/457: 信封,由qmail-queue生成。<br>info/457: 信封上的发送者地址,预处理后生成。<br>local/457: 本地接受地址,预处理后生成。<br>remote/457: 远程接受地址,预处理后生成。<br>bounce/457: 传输错误信息。<br>
<br>以下是一条消息所有可能的状态。“+”号表示该目录下文件存在,“-”表示该目录下文件不存在,“?”表示未知。<br>S1. -mess -intd -todo -info -local -remote -bounce<br>S2. +mess -intd -todo -info -local -remote -bounce<br>S3. +mess +intd -todo -info -local -remote -bounce<br>S4. +mess ?intd +todo ?info ?local ?remote -bounce (queued,表示已经进入队列)<br>S5. +mess -intd -todo +info ?local ?remote ?bounce (preprocessed,表示已通过预处理)<br>
<br>
重点:如果消息457存在,那么它也对应一个inode结点号457。<br>
<br>
<br>
3. 消息如何进入队列?<br>
<br>添加一条消息到队列里,qmail-queue首先创建一个单独的目录,命名为 pid/。然后在这个目录下为这条消息创建一个独立文件。文件系统为这个文件分配唯一的标识,暂时记做457。qmail-queue监视这个文件标识,并保证这条消息进入状态S1。<br>qmail-queue接着把pid/ 更名为mess/457,进入状态S2。然后写一些相关的信息到mess/457目录下,创建目录intd/457,进入状态S3,并在intd/457下写入相关的信封信息。<br>最后,qmail-queue创建一个指向 intd/457 的链接 :todo/457 ,进入状态S4。到此为止,这条消息已经被处理到队列中,等待qmail-send的处理。<br>qmail-queue在处理任何文件之前,会启动一个24小时的超时记时器。一旦等待处理超过24小时,qmail-queue将中止当前进程。<br>
<br>
4. 队列中的消息如何预处理 <br>
<br>一旦消息进入等待队列,qmail-send必须判断哪些是要投递给本地接收者,哪些是要投递给远程接收者。它也有可能重写某些接受者地址。<br>当qmail-send检测到 todo/457 目录,得知消息457处于状态S4。于是,它先删除已经存在的(假如)info/457, local/457 和 remote/457目录。然后读取整个todo/457目录,生成 info/457 、 local/457 或者 remote/457 目录。完成这些操作后,删除 intd/457目录。这时,该条消息仍然处于S4状态。最后,qmail-send删除 todo/457 目录,进入S5状态。到此为止,这条消息已成功的完成预处理。<br>
<br>
5. 预处理后,消息如何被投递。<br>
<br>处在S5状态的消息将被做如下处理。每个 local/457 和 remote/457 目录下的邮件地址将被标记NOT DONE 或 DONE:<br>
<br>DONE: 表示该消息已经被成功投递,或者是投递时遇到了永久性错误。这时,qmail-send将会停止对该消息所示的地址继续进行投递任务。<br>NOT DONE:如果已经有投递任务在尝试,该标记表示投递人物遇到暂时性错误。这种情况下,qmail-send会随后继续尝试投递。<br>
<br>qmail-send 会在空闲的时间尝试给标记了NOT DONE 的地址发送邮件。如果邮件被成功处理,qmail-send将在该地址标记DONE。如果遇到永久性错误,它首先发送一条错误通知到bounce/457目录(如果该目录不存在,就自动创建),然后将邮件地址标记为DONE。<br>
<br>注意:bounce/457被设计成不强健的。<br>
<br>qmail-send会在任意的时刻处理 bounce/457目录 ,可能如下:<br>1)从 bounce/457 和 mess/457目录创建一条新的bounce消息<br>2)删除bounce/457目录。<br>
<br>当local/457中所有的邮件地址都被标记DONE后,qmail-send将删除local/457。同样的,remote/457也做此处理。随后,qmail-send删除队列里的邮件:<br>第一步、如果 bounce/457存在,qmail-send按照上述的方法处理。<br>第二步、如果 bounce/457已删除,qmail-send删除 info/457目录,进入状态S2;然后删除 mess/457 ,进入状态S1。<br>
<br>
6. Cleanups清除操作。<br>
<br>如果在qmail-queue处理邮件队列时,或者qmail-send正删除邮件时,系统因故障崩溃,当时处理的邮件就会处在S2或者S3状态。<br>如果qmail-send检查到有邮件处在S2或者S3状态(不是正在删除的邮件),而mess/457的创建时间已经过了36小时,它就相续删除 intd/457 (如果存在)和 mess/457。此时,正在处理该邮件的qmail-queue将被挂起。<br>同样的,如果qmail-send发现 pid/ 目录下的文件创建时间超过36小时,也将删除该目录。<br>如果在qmail-send投递邮件时发生系统崩溃故障,Cleanups则无须运行。最遭情况下,邮件可能会被投递两次。其实,在分布式邮件系统上,目前并没有一种有效的方法来降低邮件重复投递的可能。不妨试想一下,如果在接受方的邮件服务器响应之前,投递邮件的SMTP链接发生断路错误,该怎么办?显然,用户必须考虑到这种最坏情况,并再次发送邮件。同样的,如果在qmail-send进程为邮件做DONE标记之前,计算机崩溃了。那么,重启后的新进程必须再次发送该邮件。通常的方法是,利用日志文件。反正,删除重复邮件是接受方的事情,无须顾虑。<br>
<br>
7. 更多<br>
<br>目前,info/457的存在有两种作用:<br>1、它记录了邮件信封中,发送人的信息。<br>2、守护进程通过它的修改时间来判断该邮件在队列中是否超时。<br>将来,随着系统改进, info/457 可能会存储更多的信息。任何改变都是向后兼容的,并将由版本号标识。<br>当qiaml-queue成功的将一条邮件加入到队列中时,它将启动一个由qmail-send设定的触发器。该触发器的工作机制是:命名管道锁触发-- lock/trigger 。在扫描 todo/ 之前,qmail-send 打开 lock/trigger下的管道O_NDELAY 设定可读。qiaml-queue通过向O_NDELAY写一个字节来触发qmail-send。这使得 locks/trigger 可读并唤醒qmail-send进程。在再次扫描 todo/ 之前,qmail-send 先关闭lock/trigger再打开它
板凳
发表于 2004-7-16 12:31:54 | 只看该作者

Re:qmail的清除队列命令是什么啊?

给你一个好用的资源<br>
qmail-remove介绍:<a target=_blank href=http://www.linuxmagic.com/opensource/qmail/qmail-remove/>http://www.linuxmagic.com/opensource/qmail/qmail-remove/</a><br>
<br>
下载:<br>
wget <a target=_blank href=http://www.linuxmagic.com/opensource/qmail/qmail-remove/qmail-remove-0.94.tar.gz>http://www.linuxmagic.com/opensource/qmail/qmail-remove/qmail-remove-0.94.tar.gz</a><br>
<br>
安装:<br>
<br>
#tar zxf qmail-remove-0.94.tar.gz<br>
<br>
#cd qmail-remove-0.94<br>
#make<br>
#make install<br>
#cd /var/qmail/queue<br>
#mkdir yanked [所有队列中的垃圾邮件都将被转移到这个目录中,随你怎么处理拉:)]<br>
<br>
运行:<br>
# qmail-remove -r [注意:使用这条命令前必须将qmail停止]<br>
<br>
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2026-8-5 06:23

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表