pypolicyd-spf
在 Postfix 3.3.1 中实现支持RHEL 8,遇到以下错误/var/log/maillog
:
spawn[xxxx]: fatal: spawn_comand: execvp /usr/bin/python: No such file or directory
postfix/spawn[xxxx]: warning: command /usr/bin/python exit status 1
spawn[xxxx]: fatal: spawn_comand: execvp /usr/bin/python: No such file or directory
postfix/spawn[xxxx]: warning: command /usr/bin/python exit status 1
postfix/smtpd[xxxx]: warning: problem talking to server private/policyd-spf: Connection reset by peer
不可能是路径问题,因为用户后缀没有路径:
$ getent passwd postfix
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
你在哪里解决这个问题?
答案1
问题:
乍一看,这似乎是路径问题,但事实并非如此。策略spf需要一个正确的在其中查找Python的绝对路径后缀在master.cf
配置中。
我最初的路——我相信我是从网上某个地方的一些 HowTo 复制的- 整合中master.cf
是:
policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/bin/python /usr/libexec/postfix/policyd-spf
很接近,但没有雪茄:提供的 Python 路径argv
不包含版本号,因此错误被抛出。
解决方案:
第一的:找到Python所在的位置。在RHEL 8.1, 我懂了:
whereis python
python: /usr/bin/python3.6 /usr/bin/python3.6m /usr/lib/python3.6 /usr/lib64/python3.6 /usr/include/python3.6m /usr/share/man/man1/python.1.gz
第二: 供应一个正确的Python 的绝对路径策略spf配置在/etc/postfix/master.conf
:
policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/bin/python3.6 /usr/libexec/postfix/policyd-spf
最后,重新启动Postfix:
systemctl restart postfix
结论:
不要追着调查路径问题,这不是一个特定的问题RHEL 8任何一个。错误将被隐藏在指定的Python绝对路径中策略spf配置在master.cf