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
...