(ローカル)DNS検証の準備ができたらsystemdサービスを開始するには?

(ローカル)DNS検証の準備ができたらsystemdサービスを開始するには?

DNS検証を処理する準備ができた場合にのみ起動するようにカスタムsystemdサービスを構成するにはどうすればよいですか?

このサービスは、起動するとすぐにデバイスの現在のWANとLANのIPアドレスを私に送信するワンタイムスクリプトです。以前は機能していましたが、Pi-holeのインストール後に起動時に自動的に実行が停止します。サービスを手動でトリガーすることはsudo systemctl start mail-ip-at-boot.service依然として機能します。

起動時に名前解決の問題(メールサーバーのホスト名など)が原因で失敗します。から/var/log/syslog

sendemail[1182]: ERROR => Connection attempt to smtp.<myisp>:25 failed IO:Socket::INET6 getaddrinfo: Temporary failure in name resolution.

同様の問題が報告されましたdig(mailipスクリプトで使用されています)dig: couldn't get address for 'resolver1.opendns.com': failure:。私はResolver1ホスト名を固定IPアドレスに置き換えることでこの問題を解決しました。もちろん、これは単なる解決策です。

このソリューションは、Pi-holeをインストールするかどうかに関係なく機能します。

以下は現在のサービス定義です。

me@raspberripi:~$ cat /etc/systemd/system/mail-ip-at-boot.service
[Unit]
Description=Mail WAN and LAN IP address
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/mailip.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

一時的な解決策:

  • 方法1(動作しない)を使用しているようですnss-lookup.target。 「すべてのホスト/ネットワーク名サ​​ービス検索の同期点として使用する必要がある宛先」と説明されています。 (望むよりhttps://www.freedesktop.org/software/systemd/man/systemd.special.html)。たとえば、次のディレクティブで使用されます。
    Wants=network-online.target nss-lookup.target
    After=network-online.target nss-lookup.target

有望に見えますが、方法1は機能しないようです。

  • 方法2.を参照して進めました。これらのガイドラインのためにピホール-FTLが利用できない場合でも、まだ機能しているようpihole-FTL.serviceです。Wantsバラよりhttps://unix.stackexchange.com/a/423724/40237
    Wants=network-online.target pihole-FTL.service
    After=network-online.target pihole-FTL.service

2番の方法は、パイホールとのカップリングを生成するので、まったく気に入らない。悪い習慣

ベストアンサー1

ホスト名のルックアップが正しく機能するまでブロックする新しいワンタイムサービスを作成します。たとえば、次のようになります。

[Unit]
Description=Wait for DNS
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'while ! host smtp.example.com; do sleep 1; done'

次に、「メールWANとLANのIPアドレス」サービスがそれに応じて変わるようにします。

[Unit]
Description=Mail WAN and LAN IP address
Wants=network-online.target wait-for-dns.service
After=network-online.target wait-for-dns.service

...

おすすめ記事