我正在尝试调查我们的一台 CentOS 7 服务器上的一个问题,该服务器yum-cron
无法通过执行操作的结果向 root 发送电子邮件。
它总是给出这个错误:
无法向 localhost 发送电子邮件:[Errno 111] 连接被拒绝
但是,我们还有其他具有相同配置的服务器,这是唯一出现此类问题的服务器。
以下是yum-cron.conf
内容:
[commands]
# What kind of update to use:
# default = yum upgrade
# security = yum --security upgrade
# security-severity:Critical = yum --sec-severity=Critical upgrade
# minimal = yum --bugfix update-minimal
# minimal-security = yum --security update-minimal
# minimal-security-severity:Critical = --sec-severity=Critical update-minimal
update_cmd = default
# Whether a message should be emitted when updates are available,
# were downloaded, or applied.
update_messages = yes
# Whether updates should be downloaded when they are available.
download_updates = yes
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes
# Maximum amout of time to randomly sleep, in minutes. The program
# will sleep for a random amount of time between 0 and random_sleep
# minutes before running. This is useful for e.g. staggering the
# times that multiple systems will access update servers. If
# random_sleep is 0 or negative, the program will run immediately.
# 6*60 = 360
random_sleep = 360
[emitters]
# Name to use for this system in messages that are emitted. If
# system_name is None, the hostname will be used.
system_name = None
# How to send messages. Valid options are stdio and email. If
# emit_via includes stdio, messages will be sent to stdout; this is useful
# to have cron send the messages. If emit_via includes email, this
# program will send email itself according to the configured options.
# If emit_via is None or left blank, no messages will be sent.
emit_via = email
# The width, in characters, that messages that are emitted should be
# formatted to.
output_width = 80
[email]
# The address to send email messages from.
email_from = root
# List of addresses to send messages to.
email_to = root
# Name of the host to connect to to send email messages.
email_host = localhost
[groups]
# NOTE: This only works when group_command != objects, which is now the default
# List of groups to update
group_list = None
# The types of group packages to install
group_package_types = mandatory, default
[base]
# This section overrides yum.conf
# Use this to filter Yum core messages
# -4: critical
# -3: critical+errors
# -2: critical+errors+warnings (default)
debuglevel = -2
# skip_broken = True
mdpolicy = group:main
# Uncomment to auto-import new gpg keys (dangerous)
# assumeyes = True
我仔细检查过,它与其他服务器上的配置文件相同。
此外,所有服务器都postfix
安装为邮件服务器,使用 sendgrid 作为 smtp 中继。
最后,在所有mail
服务器上,通过命令手动向 root 发送电子邮件可以正常工作。
我应该检查什么才能使 cron 正确地向 root 发送电子邮件?
编辑:
经过一些测试,我注意到在有问题的服务器上,没有监听 TCP 端口 25:
[root@srv1 ~]# ss -tnlp | grep :25
[root@srv1 ~]#
在另一台服务器上,我得到:
[root@srv2 ~]# ss -tnlp | grep :25
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=768,fd=13))
[root@srv2 ~]#
PID 768 的进程在哪里/usr/libexec/postfix/master -w
。
然后,我检查了哪些进程对postfix
服务处于活动状态,并在我得到的第一台服务器上:
[root@srv1 ~]# service postfix status
Redirecting to /bin/systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-01-10 09:18:55 CET; 5min ago
Process: 17409 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 17431 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 17428 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 17421 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 17503 (master)
CGroup: /system.slice/postfix.service
├─17503 /usr/libexec/postfix/master -w
├─17504 pickup -l -t unix -u
└─17505 qmgr -l -t unix -u
而在第二个输出是:
[root@srv2 ~]# service postfix status
Redirecting to /bin/systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2016-12-28 16:34:19 CET; 1 weeks 5 days ago
Main PID: 768 (master)
CGroup: /system.slice/postfix.service
├─ 768 /usr/libexec/postfix/master -w
├─ 770 qmgr -l -t unix -u
├─8185 pickup -l -t unix -u
└─9148 tlsmgr -l -t unix -u
所以看起来第一台服务器tlsmgr
根本没有启动,但是我在日志中找不到任何错误。
最后我发现这不是问题,
yum-cron
而是postfix
本身的配置问题。事实上,在第一台服务器上,
master.cf
文件是这样的:在第二台服务器上是:
并通过将第一个文件设置为第二个文件,即取消注释第一
smtp
行并删除该submission
行,我让它按预期工作。