FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Billy am 07 März 2013, 15:00:28

Titel: Systemaufruf für pkill -f
Beitrag von: Billy am 07 März 2013, 15:00:28
Hallo,

ich will mit
define Heizung at +*00:03:00  { `/opt/Heizung/S40aktTDCtest.pl > /dev/null &` }

ein Perl Script starten, das meine Daten aus dem Heizungsregler über rs485 Schnittstelle ausliest. (alle 3 Minuten)
Das klappt soweit problemlos.

Um sicherzustellen dass vor Aufruf des Scriptes alle alten Prozessreste gekillt sind, möchte ich im ersten Schritt
den Systemaufruf -- /opt/ESAG/pkill -f S40akt -- über das at auslösen. (von der Konsole geht der Systemaufruf)

Ich hatte mir das so vorgestellt? die Backticks entsprechen dem system
define Heizung at +*00:03:00  { `/opt/Heizung/pkill -f S40akt &` ;;`/opt/Heizung/S40aktTDCtest.pl > /dev/null &` }

Klappt aber nicht, da fehlt wohl noch was.
Hat jemand eine Idee?
Danke Billy
Titel: Aw: Systemaufruf für pkill -f
Beitrag von: Rohan am 07 März 2013, 15:31:57
Hi,

evtl. ein "system('..." wie hier (http://forum.fhem.de/index.php?topic=11402.msg67320#msg67320)?

Gruß
Thomas
Titel: Aw: Systemaufruf für pkill -f
Beitrag von: Billy am 07 März 2013, 17:59:26
Hi Thomas,

ich hatte es mit system ja schon probiert und bin für den Hauptteil
define Heizung at +*00:03:00 { `/opt/Heizung/S40aktTDCtest.pl > /dev/null &` }
der ja läuft bei den Backticks gelandet.
Mit system hatte ich das Problem, daß /dev/null & nicht lief und die ist notwendig, sonst blockiert fhem, und man kann solange das Script läuft keine fhem Kommandos durchfuehren.

Eigentlich habe ich ja 2 Probleme.
1. In { `/opt/Heizung/pkill -f S40akt &` } vermute ich einen Fehler
2. Wie verbinde ich den Systemaufruf mit dem Aufruf des Per Scriptes?
So?
define Heizung at +*00:03:00 { `/opt/Heizung/pkill -f S40akt &` ;;`/opt/Heizung/S40aktTDCtest.pl > /dev/null &` }

oder so?
define Heizung at +*00:03:00 { `/opt/Heizung/pkill -f S40akt &` } {`/opt/Heizung/S40aktTDCtest.pl > /dev/null &` }

oder ist beides falsch?

Gruss Billy

Titel: Aw: Systemaufruf für pkill -f
Beitrag von: Rohan am 07 März 2013, 21:19:10
Hallo Billy,

mal ganz unbedarft gefragt (weil ich davon keine Ahnung habe, aber nicht meine F***** halten kann ;) ): Wenn du den ersten Befehl mit "system('..." aufrufst und den zweiten (lt. deinem ersten Post funktionierenden) Befehl ohne ... ???
Titel: Aw: Systemaufruf für pkill -f
Beitrag von: Billy am 07 März 2013, 21:56:53
Zitat von: Rohan schrieb am Do, 07 März 2013 21:19Hallo Billy,

mal ganz unbedarft gefragt (weil ich davon keine Ahnung habe, aber nicht meine F***** halten kann ;) ): Wenn du den ersten Befehl mit "system('..." aufrufst und den zweiten (lt. deinem ersten Post funktionierenden) Befehl ohne ... ???
Falls du so meinst,
define Heizung at +*00:03:00 { system('/opt/Heizung//pkill -f S40akt > /dev/null &') }
das geht nicht!
Vielleicht kann Fladdy helfen?
Billy
Titel: Aw: Systemaufruf für pkill -f
Beitrag von: Billy am 08 März 2013, 18:49:06
An die FHEM - Perl Spezialisten!
Habe mir mal folgende Testumgebung aufgebaut:
Anmerkung 1. Beide Testscripte (Perl) tun auf der Konsole das was sie sollen!

Testscript1:  D1aus.pl dient für mich als Referenz für die Syntax! (Schaltet eine Diode aus)
Testscript2:  fkill.pl ist das eigentliche Systemskript zum Aufruf von pkill -f! (beendet vi Prozess zum Test!)
Zur nochmaligen Klarstellung beide laufen von der Konsole!
Syntax zum Aufruf von der Konsole!
root@iconnect:/opt/Test# perl D1ein.pl
root@iconnect:/opt/Test# perl fkill.pl

fkill.pl
----------------------------------------------------
#!/usr/bin/perl -w
# Testscript pkill zum Beenden des vi prozesses
#
   use strict;
    use warnings;
    system("pkill", "vi");
----------------------------------------------------

Syntax zum Aufruf aus FHEM!

{ `/opt/Test/D1aus.pl > /dev/null &` } ----> läuft
{ `/opt/Test/fkill.pl > /dev/null &` } ----> läuft nicht!

Kann mir das einer erklären? Habe bewusst den vi als prozess genommen, falls das einer nachstellen will.

Billy