Interaktives Skript beim Herunterfahren von Debian ausfuehren

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Interaktives Skript beim Herunterfahren von Debian ausfuehren

Beitrag von Rosenrot » 10.12.2018 21:39:41

Hallo zusammen,

ich möchte gerne beim Herunterfahren von Debian ein interaktives Skript auf der Konsole starten.
Also auf tty.
Ich habe erst einmal mit einem ganz banalen Skript angefangen.
Dieses ließt nur eine Eingabe ein und schreibt sie wieder auf den Bildschirm.
Außerdem legt es eine Datei im Heimatverzeichnis an.

Mein Skript liegt in /etc/init.d und der entsprechende Symlink nach /etc/rc0.d sind auch erstellt.

Im Verzeichnis /etc/systemd/system liegt die Unit Test.service mit folgendem Code:

Code: Alles auswählen

[Unit]
Description=Test

[Service]
Type=simple
ExecStop=/etc/init.d/Test.sh

[Install]
WantedBy=multi-user.target
Das Skript wird auch irgendwie tatsächlich aufgerufen.
Das sehe ich an der angelegten datei.
Nur leider ohne seine interaktiven Elemente.
Das ist aber wichtig, da das mal ein ganzes Backup machen soll.
Außerdem ist mein Dienst also meine Unit (ehrlich gesagt verstehe ich den Unterschied nicht) inaktiv, wenn ich das mit :

Code: Alles auswählen

systemctl status Test.service
überprüfe.
Ich kann im Netz ganz viele Anleitungen zum Thema finden.
Leider befasst sich keine mit meinem spezifischen Problem mit der Interaktion und ich kann nicht wirklich einen angemessenen Einstieg in die Thematik finden.
Ich weiß einfach nicht wo ich anfangen soll bei den ganzen Info's.

Vielleicht kann mir jemand ein paar Tipps geben?

Lieben Gruß
Rosenrot

Benutzeravatar
MartinV
Beiträge: 790
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Interaktives Skript beim herunterfahren von Debian ausfuehren

Beitrag von MartinV » 10.12.2018 22:15:43

Nur leider ohne seine interaktiven Elemente.
Für einen interaktiven Service:
In der Sektion [Service] nach der Zeile mit ExecStart einfügen:

Code: Alles auswählen

StandardInput=tty
StandardOutput=tty
Mein Skript liegt in /etc/init.d und der entsprechende Symlink nach /etc/rc0.d sind auch erstellt.
Das sind eigentlich Verzeichnisse für das alte SysVinit, nicht für systemd. Soweit ich weiß, gibt es die nur noch aus Kompatibilitätsgründen.
Ich würde das Skript in /usr/local/bin ablegen.
Außerdem ist mein Dienst also meine Unit (ehrlich gesagt verstehe ich den Unterschied nicht) inaktiv, wenn ich das mit :

systemctl status Test.service

überprüfe.
Aktiviere den Service mit:

Code: Alles auswählen

systemctl enable Test.service
Aber du sagst, das Skript wird bereits erfolgreich beim Shutdown ausgeführt? Da bin ich unsicher. Vielleicht wird der Service erst beim Ausführen als aktiv angezeigt. Wie ist denn die vollständige Ausgabe von

Code: Alles auswählen

systemctl status Test.service
?

Code: Alles auswählen

mein Dienst also meine Unit (ehrlich gesagt verstehe ich den Unterschied nicht)
Jeder systemd-Service ist eine Unit.
Units können auch z.B. ein target (Ziel) statt ein service (Dienst) sein.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Interaktives Skript beim herunterfahren von Debian ausfuehren

Beitrag von Rosenrot » 11.12.2018 12:51:17

Hallo zusammen,
ich habe hier mal die Ausgabe von

Code: Alles auswählen

systemctl status Test.service

Code: Alles auswählen

● Test.service - Test
   Loaded: loaded (/etc/systemd/system/Test.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Tue 2018-12-11 12:20:20 CET; 4min 16s ago
  Process: 498 ExecStop=/home/alpha/Test.sh (code=exited, status=0/SUCCESS)
  Process: 495 ExecStart=/home/alpha/Start.sh (code=exited, status=0/SUCCESS)
 Main PID: 495 (code=exited, status=0/SUCCESS)
Ausserdem habe ich meinen Code von /etc/systemd/system/Test.service angepasst. Der sieht jetzt folgendermassen aus:

Code: Alles auswählen

[Unit]
Description=Test
After=getty@tty1.service

[Service]
Type=oneshot
ExecStart=/home/alpha/Start.sh
ExecStop=/home/alpha/Test.sh
StandardOutput=tty
StandradInput=tty
TTYPath=/dev/tty1
TTYReset=yes
TTYVHangup=yes

[Install]
WantedBy=multi-user.target
Die StandardInput bzw. StandardOutput Eintraege haben nicht wirklich was bewirkt. Die echo-Befehle wurden jetzt zwar angezeigt, aber das Skript ist beendet bevor ich etwas eingeben kann. Danach kommt gleich die Login-Aufforderung. Beim Herunterfahren passiert gar nichts.
Mit dem aktuellen Test.service passiert auch beim Hochfahren ueberhaupt nichts.

Muessen die Skripte irgendwie besonders aussehen oder einen besonderen Charakter/Struktur haben.
Kein exit-Befehl, etc.?
Lieben Gruss
Rosenrot :D

Benutzeravatar
MartinV
Beiträge: 790
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Interaktives Skript beim herunterfahren von Debian ausfuehren

Beitrag von MartinV » 11.12.2018 13:03:57

Du hast einen Buchstabendreher:

Code: Alles auswählen

StandradInput=tty
Muß heißen:

Code: Alles auswählen

StandardInput=tty
Vielleicht geht die Eingabe nach der Korrektur. Falls nicht, hilft vllt. ein Gebastel mit agetty.


Ich bin etwas verwundert, daß das Skript beim Herunterfahren ausgeführt werden soll. Diese Zeile sagt eigentlich, daß es beim Hochfahren gestartet wird:

Code: Alles auswählen

After=getty@tty1.service
Inaktiv ist der Service, weil er bereits beim Hochfahren ausgeführt und beendet wurde. Durch Type=oneshot hast Du außerdem definiert, daß der Service nur einmal ausgeführt und nicht wieder neu gestartet wird, wenn er sich selbst beendet hat.

Wie man definiert, daß ein Service beim Herunterfahren ausgeführt wird, müßte ich erst nachsehen.
Muessen die Skripte irgendwie besonders aussehen oder einen besonderen Charakter/Struktur haben.
Kein exit-Befehl, etc.?
Eigentlich nicht.
Zuletzt geändert von MartinV am 11.12.2018 14:38:55, insgesamt 1-mal geändert.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

Re: Interaktives Skript beim herunterfahren von Debian ausfuehren

Beitrag von ReturnToSender » 11.12.2018 14:34:36

Rosenrot hat geschrieben: ↑ zum Beitrag ↑
10.12.2018 21:39:41
ich möchte gerne beim Herunterfahren von Debian ein interaktives Skript auf der Konsole starten.
Das ist so weit ich weiss nicht möglich. Ich hatte nämlich die gleiche Idee und musste lernen, dass das nicht geht. Einerseits lässt systemd, wenn das shutdown.target aktiv ist, keine neuen Starts von Programmen mehr zu, sondern nur noch mit dem ExecStop-Statement. Und weiterhin haben alle laufenden Programme nur noch ca. 90 Sekunden Zeit sich zu beenden, ansonsten werden sie durch einen Timeout gelöscht. Ein interaktives Backup im laufenden Shutdown funktioniert also nicht so einfach. Ich wollte nur ein paar Daten auf einen USB-Stick sichern, aber auch das ging nicht, das Programm wurde gar nicht gestartet. Ich habe das dann so gelöst, dass nicht der Rechner herunterfährt und deswegen kopiert wird, sondern ich starte das Kopier-Programm und das fährt am Ende den Rechner runter.

Rosenrot
Beiträge: 39
Registriert: 24.07.2017 20:24:54

Re: Interaktives Skript beim Herunterfahren von Debian ausfuehren

Beitrag von Rosenrot » 11.12.2018 16:57:33

Hi,
ja, an so was hatte ich leider auch schon gedacht.
Vor allem weil beim Herunterfahren ja nie was passiert ist.
Aber ich hab es immer darauf geschoben, dass mein Dienst ja inaktiv war.
Leider funktioniert dein Vorschlag bei mir so nicht.
Es ist nicht mein PC und der Benutzer wird mit Sicherheit regelmäßig an dem Skript vorbei runterfahren.
Das ist so nicht Sinn der Sache.
Auch das Skript beim Hochfahren mitnehmen ist nicht elegant.
Erstens weil man nach dem Hochfahren sofort arbeiten möchte und nicht erst noch Backup's machen. Und zweitens weil ich das Backup sinnigerweise gleich nach dem erstellen neuer Daten anbieten möchte.

Gibt es denn nicht eine andere Lösung.
Ich hab schon daran gedacht den Prozess des Herunterfahrens selber zu verändern.
Das also beim Anstoßen des Herunterfahrens erst das Skript abgearbeitet wird und dann erst das Shutdown.target gefeuert wird.
Leider sind das Ideen die ich
a) nicht ansatzweise umzusetzen weiß
b) von denen ich keine Anhnung habe ob sie überhaupt annähernd realistisch sind.

Dafür fehlt mir einfach das Fachwissen an der Stelle.

Was meint ihr?

Gruß
Rosenrot :(

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Interaktives Skript beim Herunterfahren von Debian ausfuehren

Beitrag von heisenberg » 11.12.2018 17:12:34

Grundsätzlich stelle ich mir die Frage, warum das Backup interaktiv sein muss?
Geht es nicht auch automatisch? (Liegt es an der noch fehlenden Fähigkeit das zu automatisieren?)

Ich kann mir schon vorstellen, dass ein Backup vielleicht etwas nervt, wenn man arbeiten möchte.
Wenn es aber mit wenig Resourcen nebenbei läuft, ist es vielleicht gar nicht zu bemerken, wenn es
vielleicht 10 Min. nach dem hochfahren anfängt.

Wenig Resourcen:

Das Programm starten mit
  • nice -n20 programm (Minimale CPU-Priorität)
  • ionce -c3 programm (Minimale Priorität bei der Nutzung von Festspeichern(Festplatte, SSD) (oder auch Netzwerk?)

willy4711

Re: Interaktives Skript beim Herunterfahren von Debian ausfuehren

Beitrag von willy4711 » 11.12.2018 17:57:36

Rosenrot hat geschrieben: ↑ zum Beitrag ↑
11.12.2018 16:57:33
Gibt es denn nicht eine andere Lösung.
Vielleicht mal ansehen:
FreeFileSync bietet auch RealTimeSync an
Ich benutze RealTimeSync nicht mehr, weil ich es für mich übertrieben fand.
Mit FreeFileSync mache ich seit Jahren aber die Sicherung meiner Daten.
Für deinen Zweck aber zumindest mal an sehenswert. Zuverlässig ist es auf jeden Fall.
Das kannst du beim Hochfahren starten. es sitzt dann mit einem Icon im Tray und lauert auf Veränderungen.
Links:
https://freefilesync.org/
https://freefilesync.org/manual.php?topic=realtimesync
https://wiki.ubuntuusers.de/FreeFileSync/

Benno007
Beiträge: 111
Registriert: 26.01.2016 19:25:05

Re: Interaktives Skript beim Herunterfahren von Debian ausfuehren

Beitrag von Benno007 » 12.12.2018 16:21:22

Du könntest immer über ./script; halt -p herunterfahren.

Antworten