Systemd:ネットワークの実行中にシャットダウンする前にコマンドを実行します。

Systemd:ネットワークの実行中にシャットダウンする前にコマンドを実行します。

コンピュータがシャットダウンする前に、Systemdが電子メールを送信するスクリプトを実行することを試みます。 Systemdはサービスが開始された逆の順序でサービスを終了するため、と入力するとAfter=network.targetサービスが以前に終了することがわかりますnetwork.target

ただしAfter=、and 行Wants=にどんな依存関係があっても、電子メールスクリプトが実行される前にネットワーク接続が失われます。電子メールを送信することもありますが、ほとんどの場合はそうではありません。これは競合状態があることを示し、Systemdはネットワークサービスを終了する前にスクリプトが完了するのを待ちません。

私のユニットファイルは次のとおりです。

[Unit]
Description=Send email before shutdown
Wants=network.target nss-lookup.target network-online.target networking.service NetworkManager.service network-manager.service
After=network.target nss-lookup.target network-online.target networking.service NetworkManager.service network-manager.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user1/send_email.sh

[Install]
WantedBy=multi-user.target

その雑誌はこう言いました。

Jun 20 13:13:14 caesar systemd[1]: Stopped Availability of block devices.
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4305] device (wlx24050fd83726): state change: deactivating -> discon
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4629] dhcp4 (wlx24050fd83726): canceled DHCP transaction, DHCP clien
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4629] dhcp4 (wlx24050fd83726): state changed bound -> done
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4648] manager: NetworkManager state is now DISCONNECTED
Jun 20 13:13:14 caesar NetworkManager[699]: <warn>  [1559301194.4661] sup-iface[0xb4fd40,wlx24050fd83726]: connection disconnected (
Jun 20 13:13:14 caesar NetworkManager[699]: <info>  [1559301194.4662] device (wlx24050fd83726): supplicant interface state: complete
Jun 20 13:13:14 caesar send_email.sh[21782]: s-nail:  Certificate depth 2
Jun 20 13:13:14 caesar send_email.sh[21782]: s-nail:   subject = /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert 

....

Jun 20 13:13:56 caesar send_email.sh[21782]: s-nail: could not initiate SSL/TLS connection: error:00000000:lib(0):func

このように難しい必要はないと思います。誰でも私が間違っていることを指摘してくれてありがとう。

答え1

「Requires=network.target」行も指定する必要があります。より多くの情報が必要な場合は訪問してくださいhttps://fedoramagazine.org/systemd-unit-dependent-and-order/

関連情報