[Frage] Bei bestimmter Aktion ein Skript/Befehl ausführen

WileC

Mitglied
Mitglied seit
28 Nov 2007
Beiträge
395
Punkte für Reaktionen
13
Punkte
18
Hallo liebes Forum,

ist es irgendwie möglich, ein Skript oder ein Befel (zB /etc/init.d/rc.dsld restart) auszuführen, wenn eine bestimmte Aktion, wie die Anmeldung eines WLAN-Geräts (mittels MAC-Adresse) oder wenn der WLAN-Button gedrückt wird (WLAN an/aus)?

Ziel: wenn sich ein bestimmter Laptop am WLAN anmeldet und per DNSMasq eine IP zugeordnet bekommt, oder wenn grundsätzlich per Taster WLAN aktiviert wird, soll einfach der DSLD einen "reconnect" durchführen.

Vielen Dank schonmal
 
Hi,

in einer Schleife könntest du mittels Roadmans Skript prüfen, ob sich eine bestimmte MAC angemeldet hat und dann deine Aktionen ausführen.
 
Und wo lasse ich das Skript dann starten, ohne dass der Router in der Schleife "hängen" bleibt ?

Vielen lieben Dank schonmal.
 
Wenn du Freetz auf der Box hast, dann bietet sich die crontab an oder du baust dir eine While-Schleife und startest dein Skript in der rc.custom (die wird bei jedem Neustart der Box ausgeführt).
Mit dem oben verlinkten Skript habe ich mir eine Anwesenheitserkennung für die Heimautomation gebaut. Das läuft sehr viel zuverlässiger als das An-Pingen von Handys. Insbesondere die neueren Stromsparmechanismen in den Smartphones seit Android 6 machen das Pingen unzuverlässig.
 
Freetz ist drauf, crontab ist verständlich.

Wenn ich's über die rc.custom laufen lassen würde, wie müsste ichs dann aufrufen?
Code:
/var/tmp/skript.sh &
?
 
Ja genau. Ob das Skript selber läuft kannst du ja vorher via Telnet-Client auf der Box testen. Dann baust du dir an das Ende der Endlosschleife ein sleep xy ein, um die Box nicht dauerhaft zu beschäftigen.
 
Du kannst dem dnsmasq auch eine Option mitgeben, dass es ein Skript startet, wenn sich Geräte per DHCP anmelden, z.B. (unter Dnsmasq > extra):

dhcp-script=/mod/root/local/bin/dhcp-script.sh

In dem Skript kannst Du z.B. action=$1, mac=$2, ip=$3, hostname=$4, supplied_hostname=$DNSMASQ_SUPPLIED_HOSTNAME auswerten.
 
@elmicha

Vielen liebne Dank für den Hinweis, der ist wirklich prima, vielleicht sogar besser, als minütlich ein Skript laufen zu lassen, welches die aktiven WLAN-Verbindung überprüft...

allerdings bekommt der DNSMasq nicht mit, wenn das Netzwerkgerät nicht mehr verbunden ist...
 
Moins


Für das Loslösen eines Skripts/Programms von der aufrufenden ( Shell ) Instanz gibt es auf der FRITZ!Box das Programm: delay
...dann braucht das Skript allerdings schon den eigenständigen Loop ( while ) mit dem "sleep".

Beispiel für delay...
Fazit: Solange man nur die Asynchronität erreichen will, ist ein Kommando wie "delay -d 1 MYJOB /bin/sh /var/tmp/myscript.sh" der - meines Erachtens - beste Weg für den Start eines Scripts, erst recht dann, wenn es ununterbrochen in einer Schleife mit 'sleep' läuft.
...kleiner Pfeil im Zitattitel führt zum Post, der ganze Thread ist durchaus lesenswert ;) .
 
  • Like
Reaktionen: WileC
@koyaanisqatsi auch Dir lieben Dank ;) ...

Also derzeit habe ich für mich ein super Skript gebastelt, welches derzeit über "cron" angesteuert wird. Funktioniert auch alles soweit. Nun habe ich festgestellt, durch Eure Tipps, dass mit der Client-Anmeldung oder MAC-Adress-Prüfung, nicht so das "praktikable" für meine Umgebung ist.

Ich würde gerne, WLAN anschalten (mittels Taster auf der Oberseite), dadurch soll das Skript gestartet werden und alle 5 Minuten erneut ausgeführt werden. Wenn ich das WLAN ausschalte (mittels Taster auf der Oberseite), so soll das Skript nicht weiter ausgeführt oder erneut aufgerufen werden.

müsste ich dazu in die /etc/init.d/rc.net eingreifen ?? Welches Skript wird druch den WLAN-Taster ausgelöst?
 
Zuletzt bearbeitet:
@koyaanisqatsi
Wie müsste ich denn genau jenes für mich umgebastelte Script per rc.custom oder in der Crontab mit "@Reboot" aufrufen, damit es ständig im Hintergrund läuft, aber die Box nicht blockiert (und ggf. "abgeschossen" werden kann")?
 
Entweder du nimmst cron für den 5 Minuten Check ohne while und sleep oder einen selbstgebastelten DAEMON der miitels ps ermittelt und mit kill oder killall abgeschossen werden kann.

Normalerweise wird das im Hintergrund laufen lassen mit dem & erreicht.
Dann wird aber eben beim Beenden des aufrufenden Prozess auch deren Hintergrundprozess(e) beendet.
Um das komplette Loslösen (normalerweise) zu erreichen wurde nohup ersonnen.
Das nur auf der Box vorhandene delay ist aber komfortabler.

Beispiel zum ausprobieren...
testcmd (mit chmod +x ausführbar machen)
Code:
#!/bin/bash
if [ ${#} == 1 ]
 then
  while true
   do sleep 5
    wall -n "${@}"
   done
 else
  echo 'need arg'
fi
( wall in der busybox ? )
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.