Programm als Dienst 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

Programm als Dienst unter Linux

Beitrag von Timm Thaler »

Ich habe für meine "Homeautomation" einige Programme auf dem Raspi laufen: Die Heizung wird per Uart monitort und die Daten abgelegt, Ereignisse wie Klingel, Telefon... werden abgelegt, ein Telegram-Bot erlaubt die Abfrage der Daten von unterwegs (ich bin öfter mal paar Tage auswärts), sollen noch einige dazukommen.

Bisher werden diese Programme mit cron beim Neustart per @reboot etwas zeitverzögert gestartet und laufen dann permanent durch. Was soweit auch gut funktioniert. Allerdings habe ich das Problem, dass ich bei Änderungen an diesen Programmen diese per Kill beenden muss und dann entweder händisch starten - wobei sie dann in der Bash laufen und man diese nicht schließen darf - oder ein Reboot durchführen muss.

Das sollte doch besser gehen, wenn ich die Programme als Dienst einrichte, dann kann ich die anhalten, neustarten und überwachen, oder?

Nur wie erstelle ich einen Dienst mit Lazarus? Der Dienst muss ja zumindest auf Systemmeldungen wie Stop, Neustart... reagieren. Gibt es da Beispiele, wie sowas aussehen muss?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Programm als Dienst unter Linux

Beitrag von mse »

Üblicherweise verwendet man dazu auf Linux systemd
https://www.freedesktop.org/software/sy ... temd.html#
und systemctl
https://www.freedesktop.org/software/sy ... emctl.html
Dein Programm muss in den entsprechenden scripts eingetragen sein und auf verschiedene Signale reagieren können.
Allerdings habe ich das Problem, dass ich bei Änderungen an diesen Programmen diese per Kill beenden muss und dann entweder händisch starten - wobei sie dann in der Bash laufen und man diese nicht schließen darf - oder ein Reboot durchführen muss.

Starte dein Programm mit

Code: Alles auswählen

 
nohup DEINPROGRAMM &
 

Danach kann das Terminal geschlossen werden ohne den Prozess zu beenden.
https://linux.die.net/man/1/nohup

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: Programm als Dienst unter Linux

Beitrag von Timm Thaler »

Nun gibt es ja unter Lazarus die Möglichkeit, ein Projekt als Daemon zu erstellen. Dann bekommt man zwei Templates: daemonmapperunit und daemonuint.

Nur, was fange ich damit jetzt an? Gibts dazu Programmbeispiele? In den fpc examples habe ich nichts gefunden - aber vielleicht auch falsch gesucht?

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Programm als Dienst unter Linux

Beitrag von Mathias »

Vielleicht hilft dir dies weiter: http://wiki.freepascal.org/UniqueInstance/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Programm als Dienst unter Linux

Beitrag von creed steiger »

da steht auch wo das example ist

http://wiki.freepascal.org/Daemons_and_Services

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

Re: Programm als Dienst unter Linux

Beitrag von Warf »



Das würde ich dir auch empfehlen, scheint das einfachste zu sein. Ansonsten für Linux (eventuell auch OSX) kannst hier schauen, sollte sich mit der Unix und BaseUnix Unit problemlos übersetzen lassen.

Bei solchen low level Unix Sachen lohnt es sich immer mal nach C Code zu suchen, den kann man meist ganz einfach übernehmen

Antworten