Na holla ... Nastra legt los
Nastra hat geschrieben: 27.02.2018 05:26:05
Ich habe mir die Sachen die du verlinkt hast zu xarg durchgelesen, will aber nicht behaupten das ich alles verstanden habe. Probiert habe ich aber so gut wie möglich bzw. soweit ich die Punkte verstehe es zu testen.
Du, das Wichtigste ist, dass du lernst, mit deinem Script bzw. mit einzelnen Zeilen daraus auf der Kommandozeile zu spielen und Trockenübungen zu machen ... das hat nicht so richtig geklappt ...
Nastra hat geschrieben: 27.02.2018 05:26:05
Ich verstehe nicht, was das -I '#' da macht. Das # wird danach doch gar nicht mehr benutzt. Was passiert denn, wenn du das # einfach in den zu sendenden String einfügst?
Skript sieht so aus:
Code: Alles auswählen
sudo -u pi xargs -L1 -I ntfy -b telegram send '#Homebridge Instanz ausgefallen’
Also was hast du hier gemacht? Hmm ... das -I bezeichnet immer noch einen Platzhalter. Du hast den Platzhalter '#' aber rausgenommen. Und der Platzhalter ist: '#'. Nicht: #. Weiterhin hinten hast du aber ein # eingefügt. Mal ausprobieren, was xargs dazu sagt:
Code: Alles auswählen
$ echo one two three | xargs -L1 -I ntfy -b telegram send '#Homebridge Instanz ausgefallen’
>
Uh? Mist. Was ist denn nun los? Der wird ja gar nicht fertig. Er wartet auf ne zweite Eingabe. Wieso das denn?
Ah ... wenn du mal genau hinguckst ... du mischt zwei verschiedene Anführungszeichen. Die gerade nach oben und die nach schräg rechts oben. Also wenn du so unsauber arbeitest, machst du dir das Leben unnötig schwer. Er wartet dann einfach darauf, dass du den String (also die Zeichenkette) mit dem richtigen Anführungszeichen beendest.
Und selbst wenn du das korrigierst ... hinter dem -I steht jetzt "ntfy". Du definierst jetzt also "ntfy" als Platzhalter. Dahinter findet xargs noch eine Option -b, die es nicht kennt und wird sich vermutlich beschweren. Danach wird es versuchen, den Befehl "telegram" auszuführen, den es vermutlich nicht gibt.
Nastra hat geschrieben: 27.02.2018 05:26:05
Wenn ich das -I gegen das -t austausche
Moooooment! Von "Austauschen" habe ich nichts gesagt. Das -I braucht grundsätzlich noch einen Platzhalter dahinter, damit es funktioniert. Sonst schmeißt es einen Fehler. Das -t versteht sich zusätzlich.
Nastra hat geschrieben: 27.02.2018 05:26:05
und mit sudo bash das Skript im Terminal starte (bin im Verzeichnis an dem das Skript liegt ) kommt keine Ausgabe die neue Zeile bleibt Leer.
Wenn du da weiterhin dein Anführungszeichen-Problem drin hast, ist das auch logisch.
Nastra hat geschrieben: 27.02.2018 05:26:05
Das gleiche passiert aber auch wenn ich das Skript in der Ursprungsform manuell ausführe.
Solange du ihm nicht mit einem
zusätzlichen -t sagst, dass er etwas ausgeben soll, ist das auch logisch. (Dass überhaupt ein Ereignis eintreten muss, auf das dein Script reagiert, also der "exit" einer homebridge-Instanz, ist klar, ja?)
Nastra hat geschrieben: 27.02.2018 05:26:05
Code: Alles auswählen
ç#!/bin/bash
[...]
sudo -u pi xargs -L1 -t '$' ntfy -b telegram send 'Homebridge Instanz ausgefallen' '$'
(ich hoffe, das "c" am Anfang ist nur ein Kopierfehler)
Nun bin ich mal gespannt, was passiert:
Code: Alles auswählen
$ echo one two three | xargs -L1 -t '$' ntfy -b telegram send 'Homebridge Instanz ausgefallen' '$'
$ ntfy -b telegram send Homebridge Instanz ausgefallen $ one two three
xargs: $: No such file or directory
xargs möchte jetzt also den Befehl "$ ntfy -b telegram send Homebridge Instanz ausgefallen $ one two three" ausführen. Warum? Du hast das -I weggelassen. Für xargs hören die Optionen nach dem -t auf, danach fängt der Befehl an, den es ausführen soll. Und das ist der Befehl '$'. Und den findet es nicht. Deswegen beendet es sich (und instanzen-reporter) mit einem Fehler. Logisch.
Und wenn ich das -I wieder reinnehme?
Code: Alles auswählen
$ echo one two three | xargs -L1 -t -I '$' ntfy -b telegram send 'Homebridge Instanz ausgefallen' '$'
ntfy -b telegram send Homebridge Instanz ausgefallen one two three
xargs: ntfy: No such file or directory
Sieht doch ganz gut aus, oder?
Nastra hat geschrieben: 27.02.2018 05:26:05
Entfällt die letzte Zeile im originalen Skript und wird gegen die echo Zeile ausgetauscht und die Variablen angepasst?
Nein! Das dämliche echo hab ich da nur reingesetzt, damit ich nicht dauernd systemd-Dienste stoppen und starten muss. Ich hab ja dieses Homebridge-Gedöns nicht. Das echo ersetzt mir die ersten zwei Script-Zeilen (also nur mir, nicht dir!). Für dich ist erst mal nur interessant, was hinter dem xargs passiert, damit du unterschiedliche Nachrichten je nach ausgefallenem Dienst bekommst.
Du kannst aber selber Trockenübungen ausführen, indem du echo eine Zeile ausgeben lässt, die journalctl dir sonst ausgibt, also so:
Code: Alles auswählen
echo "Feb 27 04:15:58 HomeKitServer instanzen-reporter.service[28317]: $ ntfy -b telegram send Homebridge Instanz ausgefallen $ Feb 27 04:15:57 HomeKitServer systemd[1]: homebridge-test.service: Main process exited, code=exited, status=143/n/a" | sudo -u pi xargs -L1 -t -I '$' ntfy -b telegram send 'Homebridge Instanz ausgefallen' '$'
Nastra hat geschrieben: 27.02.2018 05:26:05
Noch eine Frage zum Schluss das Skript weiter oben von @breakthewall das wäre nach deiner Meinung nicht der richtige Weg da ich irgendwie keine parallelen zu deine aufgezeigten Möglichkeiten sehe?
Das Script von breakthewall macht genau das gleiche wie dein Script, nur mehr in die Länge gezogen. Und es hat das gleiche xargs-Problem wie dein Script. Ich mag an deiner Variante, dass es kurz und knackig ist, aber das ist Geschmackssache. Wie auch immer ... du wirst bei beiden Scripten besser verstehen müssen, wie sie funktionieren, um sie nach deinen Wünschen anzupassen.
Never change a broken system. It could be worse afterwards.
"No computer system can be absolutely secure." Intel Document Number: 336983-001