Spaetest moeglicher Zeitpunkt fuer einen Befehl [anders Geloest]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Spaetest moeglicher Zeitpunkt fuer einen Befehl [anders Geloest]

Beitrag von heinz » 23.03.2021 15:21:00

Hallo Zusammen,

ich suche den Spaetest moeglicher Zeitpunkt fuer einen Befehl, wenn man das System anhaelt.

Hintergrund:
Mit der Hilfe von smutbert habe ich meinen Banana-Pi jetzt soweit, dass er genau das tut, was er soll.
Jetzt moechte ich den Pi natuerlich ohne Monitor nutzen und an den fest Verbauten LEDs erkennen, wann er hoch- und runter-"gefahren" ist.
Fuer das "hochgefahren" habe ich eine gute Stelle in der Datei: /etc/rc.local gefunden. Sie wird anscheinend als letztes nach dem Start ausgefuehrt.
Das selbe moechte ich nun mit dem "runterfahren" anstellen.
Es soll ein:

Code: Alles auswählen

echo "default-on" >/sys/class/leds/bananapi-m3\:blue\:usr/trigger
so nahe am halt des Systems wie moeglich ausgefuehrt werden.
Wie/Wo ist sowas moeglich?

Muss ich mir eine systemd service-unit schreiben?
Aber welchen Dienst gebe ich dann bei After= an?

Gruss,
heinz
Zuletzt geändert von heinz am 23.03.2021 19:15:18, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von MSfree » 23.03.2021 15:43:48

Spätest möglich dürfte schwierig werden. Systemd fährt die ganzen Dienste genauso parallel runter, wie sie gestartet werden. Statt after= wirst du vermutlich mit before= mehr Glück haben.

In deinem Fall vermutlich

Code: Alles auswählen

Before=shutdown.target reboot.target halt.target

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von heinz » 23.03.2021 15:54:37

Code: Alles auswählen

[Unit]
Description=Blaue LED an bei System-Halt
Before=shutdown.target reboot.target halt.target

[Service]
ExecStart=/bin/echo "default-on" >/sys/class/leds/bananapi-m3\:blue\:usr/trigger
Wird das als Inhalt reichen?
Wie benenne ich die Datei dann und wo schreibe ich sie hin?

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von MSfree » 23.03.2021 16:00:56

Hier mal wtwas zu dem Them bei Stackoverflow:
https://unix.stackexchange.com/question ... e-shutdown

Frei nach deren Vorschlägen würde ich sowas bauen:

Code: Alles auswählen

[Unit]
Description=Blaue LED an bei System-Halt
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
ExecStart=/bin/echo "default-on" >/sys/class/leds/bananapi-m3\:blue\:usr/trigger
Type=oneshot
RemainAfterExit=yes
Type oneshot und RemainAfterExit scheinen wichtig zu sein.

Benutzeravatar
smutbert
Moderator
Beiträge: 8315
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von smutbert » 23.03.2021 16:34:14

Vielleicht hilft auch eine Hardwarebastelei? ☺

Ich habe beim Raspberry Pi zu dem Zweck über einen Vorwiderstand eine LED an einen Pin des seriellen Ports angeschlossen (TXD0=gpio14 beim Raspberry Pi). Wenn die serielle Konsole nicht deaktiviert ist, leuchtet die LED, wenn der Pi läuft und erlischt nach dem Herunterfahren.

Beim Cubietruck hätte das zwar nicht funktioniert, aber am Ende war es da sogar noch einfacher. Der hat nämlich nach dem Herunterfahren seine Spannungswandler abgeschaltet – das heißt nach dem Herunterfahren sind die 3,x V weg.

Um mir den Status eines wichtigen Dienstes anzeigen zu lassen habe ich auch schon in der System-Unit mit

Code: Alles auswählen

ExecStopPost=...
ExecStartPre=...
eine LED beim Start des Dienstes ein- und beim Beenden (oder auch Absturz) ausschalten lassen.

um ~10 € gäbe es auch kleine Displays mit I²C-Anschluss, die mit minimalen Aufwand mit Debianlcdproc den Status des Systems anzeigen können.

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von heinz » 23.03.2021 16:51:27

@MSfree
Habe Deinen Link mal angeschaut und ein Wenig herumprobiert.
Die Unit sieht jetzt so aus:

Code: Alles auswählen

[Unit]
Description=Blaue LED an bei System-Halt
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
ExecStop=/bin/echo "default-on" >/sys/class/leds/bananapi-m3:blue:usr/trigger
Type=oneshot
RemainAfterExit=true

[Install]
WantedBy=multi-user.target
Gespeichert habe ich sie unter: /etc/systemd/system als led_halt.service.
Sie scheint auch zu laufen... (Gestartet mit: systemctl daemon-reload und anschliessendem systemctl enable led_halt.service --now)

Code: Alles auswählen

root@bananapi:~# systemctl status led_halt.service 
● led_halt.service - Blaue LED an bei System-Halt
   Loaded: loaded (/etc/systemd/system/led_halt.service; enabled; vendor preset: enabled)
   Active: active (exited) since Tue 2021-03-23 16:23:21 CET; 20s ago
Nur am Ende aufleuchten moechte die LED irgendwie nicht... (Von Hand im laufenden System natuerlich schon.)
smutbert hat geschrieben: ↑ zum Beitrag ↑
23.03.2021 16:34:14
Vielleicht hilft auch eine Hardwarebastelei? ☺
Auch eine interessante Idee! Allerdings liegt mein Loetkolben in irgendeinem der Umzugskartons (Die ich besser mal gescheit beschriftet haette... :| ) und eine unbenutzte LED habe ich ja schon.
Bei Armbian leuchtet nur die rote LED, die gruene lasse ich nach dem Start im "heartbeat"-Modus blinken und die blaue waere perfekt fuer halt...
Werde mal ein wenig mit:
ExecStopPost=...
ExecStartPre=...

herumexperimentieren...

Melde mich wieder...

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von heinz » 23.03.2021 17:10:17

Oh, mann... Da haetten wir noch lange suchen koennen...

Der Pi macht "unfreundlicherweise" die blaue LED aus, wenn er runtergefahren ist... :?
Sorry, mein Fehler... Haett ich vorher schauen sollen... :oops:

Planaenderung:
Die blaue LED soll eingeschaltet werden, wenn man den halt-Befehl gibt und geht dann aus wenn der Pi heruntergefahren ist...

Braucht man dann noch eine system.unit?
Die Datei /usr/sbin/halt.local scheint ja nicht mehr zu existieren/funktionieren...

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Spaetest moeglicher Zeitpunkt fuer einen Befehl

Beitrag von heinz » 23.03.2021 19:14:46

Habe es jetzt etwas anders geloest.

Es laeuft ein kleines Script auf dem Pi welches mir die momentane Empfangsstaerke auf meinem Rechner anzeigt.
Dieses habe ich jetzt so erweitert, dass ich damit auch den Pi runterfahren kann.
Und da hinein habe ich jetzt den Befehl fuer die blaue LED, vor den halt-Befehl gesetzt.

Trotz allem habe ich mich dadurch wieder etwas mit systemd beschaeftigt, was so schlecht nicht sein kann... :D

Wenn jemand zufaellig eine gut verstaendliche, deutsche Anleitung fuer das groebste von systemd kennt, wuerde ich mich freuen davon zu erfahren.

Danke fuer Eure Zeit,
heinz

Antworten