Systemaufruf für pkill -f

Begonnen von Billy, 07 März 2013, 15:00:28

Vorheriges Thema - Nächstes Thema

Billy

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
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Rohan

Hi,

evtl. ein "system('..." wie hier?

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Billy

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

FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Rohan

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 ... ???
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Billy

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
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

Billy

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
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*