Shutdown - Messages unter Linux?

Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Shutdown - Messages unter Linux?

Beitrag von Timm Thaler »

Sendet Linux beim Shutsdown oder beim Beenden (nicht Kill) im Taskmanager eine Message an Kommandozeilen-Programme, und wie kann ich diese auswerten?

Ich habe eine Abfrage auf Ctrl-C, und dann wird ein Logeintrag geschrieben und das Programm wird ordentlich beendet. Starte ich das Programm allerdings per cron, komme ich ja nicht per Ctrl-C an das Programm, kann es aber im Taskmanager oder beim Shutdown / Reboot beeden. Dabei wird es aber abrupt unterbrochen und kein Logeintrag geschrieben.

Benutzeravatar
theo
Beiträge: 10461
Registriert: Mo 11. Sep 2006, 19:01

Re: Shutdown - Messages unter Linux?

Beitrag von theo »

Man könnte das Signal auswerten. z.B. SIGHUP oder SIGTERM.

https://www.freepascal.org/docs-html/rt ... ction.html

Warf
Beiträge: 1907
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Shutdown - Messages unter Linux?

Beitrag von Warf »

theo hat geschrieben:Man könnte das Signal auswerten. z.B. SIGHUP oder SIGTERM.

https://www.freepascal.org/docs-html/rt ... ction.html


Genau so würde ich es auch machen. Es gibt verschiedene Signale in POSIX, die für dich relevant sind. SIGINT - Interrupt, wird ausgelöst wenn STRG+C in der Konsole gedrückt wird. SIGHUP - Hang Up wird gesendet wenn das Terminal welches dem Programm zugeordnet wird geschlossen wird. SIGTERM - Terminate ist eine Anfrage das Programm nett zu beenden und SIGKILL - Kill um das Programm ohne widerrede zu killen. Ein SIGKILL kann man daher auch nicht handeln oder ignorieren. Wenn das kommt wird der Prozess ohne reaktionsmöglichkeit gekillt.
Der Taskmanager sollte normalerweise ein SIGTERM senden, und nur wenn dein Programm nicht reagiert dann mit einem SIGKILL den shutdown enforcen (sigkill entspricht also windows Sofort beenden button wenn ein Programm nicht reagiert), also solltest du SIGHUP, SIGINT und SIGTERM handeln

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Shutdown - Messages unter Linux?

Beitrag von Timm Thaler »

Und dazu muss ich, wenn ich es richtig verstanden habe, zwingend eine Hookup-Procedure (heisst das unter Linux auch so?) mit den SigActionHandler verbinden? Eine "einfache" Abfrage in der Hauptschleife geht nicht?

Ist ja irgendwie auch logisch, wenn das Progamm irgendwo wartet, muss es trotzdem auf die Sigs reagieren...

Was bekomme ich, wenn Linux rebootet, ein Sigterm oder ein Sighup?

Und wie lange habe ich dann üblicherweise, um das zu verarbeiten? Reicht die Zeit, um noch einen Eintrag ins Logfile zu schreiben, ohne dass es mir die Datei zerschießt? Oder eine Message per Telegram rauszuschicken, dass der Bot beendet wird, was durchaus 300msec dauern kann?

Denn sonst kann ich mir das gleich sparen...

Benutzeravatar
theo
Beiträge: 10461
Registriert: Mo 11. Sep 2006, 19:01

Re: Shutdown - Messages unter Linux?

Beitrag von theo »

Die Zeit sollte reichen (10 - 90 sec. von SIGTERM bis SIGKILL), das ist aber afaik nicht standardisiert.
Ich würde mal SIGTERM nehmen. Das müsste mind. theoretisch das richtige Signal sein.
Vielleicht kannst du auf SIGHUP zusätzlich horchen.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Shutdown - Messages unter Linux?

Beitrag von Timm Thaler »

Um auf Ctrl-C zu reagieren, brauche ich Sigint, was ja aber wahrscheinlich jede Nachricht weiterschickt. Kann ich dann einfach mit Keypressed und Readkey auf Ctrl-C prüfen, so wie ich es jetzt schon mache? Ist ja eh nur für den Fall, dass das Programm zum Testen in der Konsole läuft und nicht per cron gestartet wurde.

Warf
Beiträge: 1907
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Shutdown - Messages unter Linux?

Beitrag von Warf »

Timm Thaler hat geschrieben:Um auf Ctrl-C zu reagieren, brauche ich Sigint, was ja aber wahrscheinlich jede Nachricht weiterschickt. Kann ich dann einfach mit Keypressed und Readkey auf Ctrl-C prüfen, so wie ich es jetzt schon mache? Ist ja eh nur für den Fall, dass das Programm zum Testen in der Konsole läuft und nicht per cron gestartet wurde.


Das SigTerm kann auch von anderen Programmen gesendet werden, dann würde den Programm auch einfach beenden

Antworten