systemdを使用して起動順序を調整する方法

systemdを使用して起動順序を調整する方法

Wi-FiがIPアドレス(dhcpcdベース)を受信したら、postfixをサーバーとして使用して電子メールを送信する必要があります。systemdデフォルトでは、postfixはwifi(wlan0)が準備される前に始まるようです。これに関連する結果は、postfixがバックグラウンドで実行できず、電子メールが正常に送信できないことです。ただし、次のスクリプトを実行すると(例:abc.sh)開始すると、Eメールは間違いなく次を通過します。

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の再起動電子メールが正しく配信されたことを確認する方法です。もし睡眠60postfixを再起動せずに適用すると、postfixが最初に正しく起動されなかったため、まだ電子メールの送信に失敗します(上記のようにIPを受信する前にロードされる可能性があります)。さらに、60秒間休止状態ではなくPostfixのみを再起動すると、Postfixの再起動はまだ失敗します。 必要=networkonline.targetそして 以降=networkonline.targetサービスファイルに適用されました。

私の質問は、IPアドレスを受信した後にWi-Fiが起動するようにpostfixを正しく設定する方法です。

答え1

systemdこれは多くの人が何度も議論したように永遠の質問です。場所。最善の機会は、「遅いネットワーク」を介してアクティブにすることですIP_FREEBIND。サフィックスに対してのみ変更することはできませんが、代わりに以下を使用してシステム全体で変更します。

echo "1" > /proc/sys/net/ipv4/ip_nonlocal_bind

ルートアカウントから。マニュアルページでよく説明されています。ip(7)

答え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.カスタマーシステムタイマー+サービス@info追加タイマーは、コンピュータの起動後{x}分に1回起動されます。 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分待つ

ラ。確認 MYUNIT=mjd-restart-postfix-after-wlan-connected MYTIMER=${MYUNIT}.timer systemctl status ${MYTIMER}

これら2つの設定ファイル(Resolve 1とPostfix 1)の内容が同じでない場合は問題があります(PostfixがLAN / WLAN接続の前に起動されます)。 Cat/etc/resolv.conf Cat/var/spool/postfix/etc/resolv.conf

E.情報@dochttps://bugs.launchpad.net/ubuntu/+source/postfix/+bug/1519331 @文書https://wiki.archlinux.org/index.php/Systemd/Timers @doc qshape遅延@doc cat /var/log/syslog | egrep "ネットワークマネージャー | サフィックス"

関連情報