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
Hi,
evtl. ein "system('..." wie hier (http://forum.fhem.de/index.php?topic=11402.msg67320#msg67320)?
Gruß
Thomas
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
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 ... ???
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
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