
eth0が起動/中断されるたびにシステムサービスを実行したいと思います(別の稼働/中断サービスかもしれません)。この値は、イーサネットが接続されているときに変更する必要があります。誰でもこれを達成する方法を知っていますか?
X秒ごとにポーリングするbashスクリプトを書くことができますが、それはおそらく私が望むよりも多くのCPUを消費し、実装がきれいではないかもしれません。
どんな提案でも歓迎します。ありがとうございます!
答え1
イーサネット稼働/中断イベント(およびその他)は、netlinkソケットを介してカーネルによって報告されます。ip monitor
ポーリングを避けるために、シェルスクリプトで使用できるメッセージを使用してメッセージを表示できます。
また、Debianには少なくとも1つのパッケージがあることがわかりました。ネットワークプラグは、netlinkメッセージを受信し、リンクの追加、アップリンク、およびダウンリンクでシェルスクリプトを実行するデーモンプロセスです。その後、シェルスクリプトを使用してsystemctl
デバイスを起動/停止できます。
(おそらく、ネットワーク管理者とsystemd-networkdもこれらのイベントを受け取り、スクリプトをリンクする方法があるかもしれませんが、使用していないようです)。
答え2
UBUNTUサーバーでは、次のようにしてwlp3S0(WLAN)インターフェースに依存するHostapdサービスを作成しました。
[Unit]
Wants=network-online.target
BindsTo=sys-subsystem-net-devices-wlp3s0.device
After=sys-subsystem-net-devices-wlp3s0.device
Requires=systemd-networkd.socket
After=systemd-networkd.socket
After=network-online.target
答え3
ServerFaultに関するこの質問について[Install]
ソリューションの表現は、カスタムサービスセクションに1行を追加するのと同じくらい簡単です。
[Install]
WantedBy=<the appropriate device unit>.device
一方、システムネットワーク接続がオンラインである間にサービスを開始したい場合、どのタイプのネットワーク接続に関係なくその後、systemdバージョンに関連するman systemd.special
使用説明書を確認してお読みください。network-online.target
私のシステムのsystemdバージョンに推奨されるステップは、それをサービスに追加することです。
[Unit]
Wants=network-online.target
After=network-online.target
...しかし、ここではsystemdのバージョンによって異なる指示が表示されているようですので、まず配布を確認してくださいman systemd.special
。