• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Workaround] NetworkManager-Events auch bei Suspend notifizieren

gehrke

Administrator
Teammitglied
Moin *,

ich möchte, dass ein System (CentOS 7) verlässlich über Statusänderungen von Netzwerkschnittstellen per Jabber informiert. Hierzu habe ich ein Script erstellt, welches im wesentlichen auch funktioniert:
Code:
# cat /etc/NetworkManager/dispatcher.d/50-notify-xmpp 
#!/bin/sh
# This is a NetworkManager dispatcher script for notification of 
# online/offline events by XMPP.
# https://wiki.archlinux.org/index.php/NetworkManager

export system=`hostname`
export device=$1
export status=$2
su -c 'echo "$system: device $device= $status" | sendxmpp -tls -s info --chatroom <chatroom>' <user>

exit 0
Das funktioniert im Prinzip sehr gut mit einer Ausnahme: Suspend (wahrscheinlich auch Hibernate).

Im Falle von Suspend wird die Meldung zur Deaktivierung der Interfaces erst nach dem nächsten Resume verschickt, also unmittelbar vor der Meldung, dass die Interfaces wieder aktiviert worden sind. Vermutlich reicht die Zeit nicht, um noch eine entsprechende XMPP-Nachricht abzusetzen, solange das Interface noch aktiv ist.

Ich brauche also eine Möglichkeit, einen Hook an der Stelle im System zu setzten, an welcher Suspend/Hibernate eingeleitet wird, aber das Netzwerk noch verfügbar ist. Ich hatte gehofft, dies im NetworkManager via Dispatcher machen zu können, aber scheinbar bekommt der das nicht mit. Alternativ muss ich wohl nach einem passenden Trigger in Systemd suchen?
TNX

cu, gehrke
 

marce

Guru
Vermutung: Da sollte sich über ein Before-Task was basteln lassen:
https://wiki.archlinux.org/index.php/Power_management#Sleep_hooks
 
OP
gehrke

gehrke

Administrator
Teammitglied
@marce: TNX

Ich habe eine Zwischenlösung, auf die ich weder stolz noch mit der ich besonders zufrieden bin. Aber sie tut erst mal und für Besseres fehlt mir Zeit und Muße...

Benachrichtigung über Verbindungsaufnahme weiterhin via Dispatcher:
Code:
# cat /etc/NetworkManager/dispatcher.d/50-notify-xmpp 
#!/bin/sh
# This is a NetworkManager dispatcher script for notification of 
# online/offline events by XMPP.
# https://wiki.archlinux.org/index.php/NetworkManager

export system=`hostname`
export device=$1
export status=$2
/home/gehrke/bin/notify-xmpp.sh "network dispatcher: $device= $status"
Das produziert beim Resume Nachrichten für beide Interfaces:
Code:
[12:58:53] ‎sendxmpp‎: j3: network dispatcher: = connectivity-change
‎[12:58:56] ‎sendxmpp‎: j3: network dispatcher: wlp8s0= up
‎[12:59:26] ‎sendxmpp‎: j3: network dispatcher: enp2s0= up
‎[13:00:07] ‎sendxmpp‎: j3: network dispatcher: enp2s0= dhcp4-change
Für Suspend:
Code:
# cat /etc/systemd/system/systemd-suspend.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Suspend
Documentation=man:systemd-suspend.service(8)
DefaultDependencies=no
Requires=sleep.target
After=sleep.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/systemd-sleep suspend
ExecStartPre=/home/gehrke/bin/notify-xmpp.sh "Suspending..." ; sleep 3
Unschön ist die Zweiteilung der Lösung sowie die Tatsache, dass ich wahrscheinlich für Shutdown und Hibernate noch weitere Definitionen brauche. Das geht mit systemd sicherlich auch hübscher, aber für mehr hat es bisher nicht gereicht...
 
Oben