使用supervisord控制postfix MTA

使用supervisord控制postfix MTA

我正在尝试使用主管控制 postfix。通常的方法是指定启动守护进程的命令,我使用postfix -c /etc/postfix start。postfix 手册页说要停止,请在上面的命令中用start替换。stop

我没有看到指定另一个命令来停止守护进程的方法,只有一个信号。master手册页说TERM信号将像postfix abort被使用一样运行,但没有说明如何通过信号正常关闭。

此外,就 Supervisord 而言,第一段的启动/停止方法比较棘手。该脚本执行一系列检查,然后调用masterqmgrpickupmaster进程组负责人的身份调用。因此,supervisord 拥有无用 PID(脚本正在以该 PID 运行)的句柄,因此无法使用该 PID 来停止守护进程。它应该拥有进程的句柄master

我已经走了多远:

[program:master]
process_name    = master
priority        = 5
directory       = /etc/postfix
command         = /usr/sbin/postfix -c /etc/postfix start
startsecs       = 0
user            = root
stopsignal      = INT

这将启动 Postfix 但无法停止它。

答案1

我的解决方案是编写一个名为postfix.sh的包装脚本,如下所示:

# call "postfix stop" when exiting
trap "{ echo Stopping postfix; /usr/sbin/postfix stop; exit 0; }" EXIT

# start postfix
/usr/sbin/postfix -c /etc/postfix start
# avoid exiting
sleep infinity   

之后修改supervisord.conf:

[program:postfix]
command=path/to/postfix.sh 

答案2

事实证明,使用类似的东西更简单监控监视守护进程:

Monit 是一款免费的开源实用程序,用于管理和监控 UNIX 系统上的进程、程序、文件、目录和文件系统。Monit 可自动进行维护和修复,并可在出现错误时执行有意义的因果操作。

您可以使用 Monit 来监控在本地主机上运行的守护进程或类似程序。Monit 对于监控守护进程特别有用,例如在系统启动时从 /etc/init.d/ 启动的进程。例如 sendmail、sshd、apache 和 mysql。

在此处输入图片描述

答案3

与@Hui Zheng 相同,但检查 posfix 是否有效

trap "postfix stop" SIGINT
trap "postfix stop" SIGTERM
trap "postfix reload" SIGHUP

# force new copy of hosts there (otherwise links could be outdated)
cp /etc/hosts /var/spool/postfix/etc/hosts

# start postfix
postfix start

# lets give postfix some time to start
sleep 3

# wait until postfix is dead (triggered by trap)
while kill -0 "`cat /var/spool/postfix/pid/master.pid`"; do
  sleep 5
done

积分去这里

相关内容