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?
Programm als Dienst unter Linux
-
- 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
-
- 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
Üblicherweise verwendet man dazu auf Linux systemd
https://www.freedesktop.org/software/sy ... stemd.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.
Danach kann das Terminal geschlossen werden ohne den Prozess zu beenden.
https://linux.die.net/man/1/nohup
https://www.freedesktop.org/software/sy ... stemd.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.
Starte dein Programm mitAllerdings 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.
Code: Alles auswählen
nohup DEINPROGRAMM &
https://linux.die.net/man/1/nohup
-
- 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
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?
Nur, was fange ich damit jetzt an? Gibts dazu Programmbeispiele? In den fpc examples habe ich nichts gefunden - aber vielleicht auch falsch gesucht?
-
- Beiträge: 6918
- 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
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
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
-
- Beiträge: 2120
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Programm als Dienst unter Linux
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.creed steiger hat geschrieben:http://wiki.freepascal.org/Daemons_and_Services
Bei solchen low level Unix Sachen lohnt es sich immer mal nach C Code zu suchen, den kann man meist ganz einfach übernehmen