一旦 wifi 收到 IP 地址(基于 dhcpcd),我需要使用 postfix 作为服务器发送电子邮件。看来systemd
默认情况下,在 wifi (wlan0) 准备好之前启动 postfix。与此相关的后果是 postfix 无法在后台运行,并且无法成功发送电子邮件。但是,如果我运行以下脚本(即abc.sh)启动时,电子邮件绝对可以通过:
sleep 60
systemctl restart postfix
echo 'email content' | mail -s 'titile' [email protected]
关联的服务文件abc.sh如下:
[Unit]
Description=pptp_setup
Requires=network-online.target
After=network-online.target
[Service]
Type=forking
ExecStart=/home/pi/script/abc.sh
[Install]
WantedBy=multi-user.target
注意睡眠 60和systemctl 重新启动 postfix是确保电子邮件发送的技巧。要是睡眠 60在不重新启动 postfix 的情况下应用,电子邮件仍然无法发送,因为 postfix 最初未正确启动(如上所述,它可能会在接收 IP 之前加载)。另外如果只重启postfix而不睡眠60秒,postfix重启仍然会失败,即使 需要=网络在线.target和 After=网络在线.target已应用到服务文件中。
我的问题是如何正确设置 postfix,以便在 wifi 收到 IP 地址后启动它。
答案1
答案2
当我将 Ubuntu 16.10 部署到新的 MiniPC 时,我遇到了同样的问题(与运行良好的 Ubuntu 14.x 相反)。
我终于找到了一个自动化解决方案:启用 NetworkManager-wait-online.service 并部署一个自定义脚本,该脚本在机器启动后 +-5 分钟重新启动 postfix 服务(假设此时无线连接处于活动状态)。
A. 启用此功能。这是一种通用方法,可能对 Postfix 之外的其他服务也有好处,因此我将其保留在脚本中。
systemctl enable NetworkManager-wait-online.service; systemctl status NetworkManager-wait-online.service;
B. 添加客户 Systemd 计时器 + 服务 @info 计时器将在机器启动后 {x} 分钟启动一次。
nano /etc/systemd/system/mjd-restart-postfix-after-wlan-connected.timer [Unit] Description=(timer)mjd-restart-postfix-after-wlan-connected [Timer] OnBootSec=5min [Install] WantedBy=timers.target
nano /etc/systemd/system/mjd-restart-postfix-after-wlan-connected.service [Unit] Description=mjd-restart-postfix-after-wlan-connected [Service] Type=oneshot ExecStart=/bin/sh -ec "systemctl restart postfix; systemctl status postfix; uname -a | /usr/bin/mailx -s \"Server (`hostname`): postfix was restarted.\" [email protected]"
MYUNIT=mjd-restart-postfix-after-wlan-connected MYTIMER=${MYUNIT}.timer systemctl enable ${MYTIMER}; systemctl status ${MYTIMER}; systemctl list-units --all | grep "${MYUNIT}" systemctl status ${MYUNIT}
C. 重新启动
reboot
#等待5分钟
D、检查
MYUNIT=mjd-restart-postfix-after-wlan-connected MYTIMER=${MYUNIT}.timer systemctl status ${MYTIMER}
如果这 2 个配置文件(Resolve 之一和 Postfix 之一)的内容不相同,则问题是有问题的(Postfix 在 LAN/WLAN 连接之前启动)。猫 /etc/resolv.conf 猫 /var/spool/postfix/etc/resolv.conf
E.信息@dochttps://bugs.launchpad.net/ubuntu/+source/postfix/+bug/1519331 @dochttps://wiki.archlinux.org/index.php/Systemd/Timers @doc qshape 延迟 @doc cat /var/log/syslog | egrep“网络管理器|后缀”