我正在尝试解决 SendMail 中的一些队列处理问题,但我不明白为什么在ps
遵循某些 sendmail 命令的输出中看到引用,而在遵循其他命令的输出中却看不到。
我有一个 8.14.x 发送邮件服务器,目前正在进行几项操作:
/usr/sbin/sendmail -L Foo_Instance -Ac -q 5m -C /etc/foo/mail/Foo_Instance/submit.cf
当我启动它,然后检查正在运行的进程时,我看到:
root 7642 0.0 0.0 9400 1736 ? Ss 18:20 0:00 sendmail: accepting connections
smmsp 7650 0.0 0.0 8348 1528 ? Ss 18:20 0:00 sendmail: Queue runner@00:05:00 for /var/spool/clientmqueue
101 7668 0.0 0.0 8348 1536 ? Ss 18:20 0:00 sendmail: Queue runner@00:05:00 for /var/spool/mqueue-foo/Foo_Instance/msp
root 7671 0.0 0.0 4028 668 pts/0 R+ 18:20 0:00 grep sendmail
我想这一切都很好,但如果我停止一切并运行:
/usr/sbin/sendmail -bd -q5m -L Foo_Instance -C /etc/foo/mail/Foo_Instance/sendmail.cf
...然后检查正在运行的进程,我看到:
root 7823 0.0 0.0 9404 1740 ? Ss 18:24 0:00 sendmail: accepting connections
root 7830 0.0 0.0 4028 688 pts/0 R+ 18:25 0:00 grep sendmail
这里的关键区别在于,我在 ps 输出中看不到“Queue runner”。为什么我两次都看不到单独的进程?或者两次都看不到?
即使我看不到队列运行器进程,我也会在日志中看到队列正在重试的迹象。
起初,我以为这可能是因为后面有一个错误的空格-q
。但即使我运行,这种行为仍然会发生
/usr/sbin/sendmail -L Foo_Instance -Ac -q5m -C /etc/foo/mail/Foo_Instance/submit.cf
我认为“Queue runner@xx:xx:xx”可能表明队列运行器是一个持久队列运行器,但 batbook 表明持久运行器进程中包含“running”一词:
root 22947 512 ? S 08:32 0:00 sendmail: running queue: /var/spool/mqueues/
q.1/df
答案1
sendmail -bd -q5m
启动主守护进程(sendmail: accepting connections
)。守护进程将生成一次队列运行进程需要的时候。您需要单独的命令来启动客户端队列运行器进程(
sendmail: Queue runner@00:05:00 for /var/spool/clientmqueue
)。客户端队列运行器行为由 控制,submit.cf
而不是由 控制sendmail.cf
。
[某些设置使用定期的“单次运行” cron 作业来处理客户端队列,而不是永久队列运行器]