mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 15:13:52 +01:00
python buffer umgangen
This commit is contained in:
@@ -1,8 +1,18 @@
|
|||||||
/var/log/revpipyload
|
/var/log/revpipyload
|
||||||
{
|
{
|
||||||
rotate 6
|
rotate 6
|
||||||
monthly
|
weekly
|
||||||
compress
|
compress
|
||||||
|
delaycompress
|
||||||
|
missingok
|
||||||
|
notifempty
|
||||||
|
}
|
||||||
|
/var/log/revpipyloadapp
|
||||||
|
{
|
||||||
|
rotate 6
|
||||||
|
weekly
|
||||||
|
compress
|
||||||
|
delaycompress
|
||||||
missingok
|
missingok
|
||||||
notifempty
|
notifempty
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
autoreload=1
|
autoreload=1
|
||||||
autostart=1
|
autostart=1
|
||||||
plcprogram=test.py
|
plcprogram=test.py
|
||||||
|
plcslave=0
|
||||||
xmlrpc=1
|
xmlrpc=1
|
||||||
xmlrpcport=55123
|
xmlrpcport=55123
|
||||||
zeroonexit=1
|
zeroonexit=1
|
||||||
|
|||||||
@@ -9,26 +9,40 @@ import signal
|
|||||||
import subprocess
|
import subprocess
|
||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
from threading import Thread, Event
|
from threading import Thread, Event
|
||||||
from time import sleep
|
from time import sleep, asctime
|
||||||
from xmlrpc.server import SimpleXMLRPCServer
|
from xmlrpc.server import SimpleXMLRPCServer
|
||||||
|
|
||||||
|
|
||||||
class RevPiPlc(Thread):
|
class RevPiPlc(Thread):
|
||||||
|
|
||||||
def __init__(self, logger, lst_proc):
|
def __init__(self, pargs, logger, lst_proc):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.autoreload = False
|
self.autoreload = False
|
||||||
self._evt_exit = Event()
|
self._evt_exit = Event()
|
||||||
self.exitcode = 0
|
self.exitcode = 0
|
||||||
self._lst_proc = lst_proc
|
self._lst_proc = lst_proc
|
||||||
|
#self._lst_proc = ["ls", "/"]
|
||||||
self._logger = logger
|
self._logger = logger
|
||||||
|
self._pargs = pargs
|
||||||
self._procplc = None
|
self._procplc = None
|
||||||
self.zeroonexit = False
|
self.zeroonexit = False
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
# Prozess starten
|
# Prozess starten
|
||||||
self._logger.info("start plc program")
|
self._logger.info("start plc program")
|
||||||
self._procplc = subprocess.Popen(self._lst_proc)
|
if self._pargs.daemon:
|
||||||
|
fh = open("/var/log/revpipyloadapp", "a")
|
||||||
|
fh.write("started {}\n".format(asctime()))
|
||||||
|
fh.flush()
|
||||||
|
elif self.pargs.logfile is not None:
|
||||||
|
fh = open(self.pargs.logfile, "a")
|
||||||
|
fh.write("started {}\n".format(asctime()))
|
||||||
|
fh.flush()
|
||||||
|
else:
|
||||||
|
fh = None
|
||||||
|
|
||||||
|
# Prozess erstellen
|
||||||
|
self._procplc = subprocess.Popen(self._lst_proc, bufsize=1, stdout=fh, stderr=subprocess.STDOUT)
|
||||||
|
|
||||||
while not self._evt_exit.is_set():
|
while not self._evt_exit.is_set():
|
||||||
|
|
||||||
@@ -36,7 +50,6 @@ class RevPiPlc(Thread):
|
|||||||
self.exitcode = self._procplc.poll()
|
self.exitcode = self._procplc.poll()
|
||||||
|
|
||||||
if self.exitcode is not None:
|
if self.exitcode is not None:
|
||||||
|
|
||||||
if self.exitcode > 0:
|
if self.exitcode > 0:
|
||||||
self._logger.error(
|
self._logger.error(
|
||||||
"plc program chrashed - exitcode: {}".format(
|
"plc program chrashed - exitcode: {}".format(
|
||||||
@@ -50,9 +63,9 @@ class RevPiPlc(Thread):
|
|||||||
else:
|
else:
|
||||||
self._logger.info("plc program did a clean exit")
|
self._logger.info("plc program did a clean exit")
|
||||||
|
|
||||||
if self.autoreload:
|
if not self._evt_exit.is_set() and self.autoreload:
|
||||||
# Prozess neu starten
|
# Prozess neu starten
|
||||||
self._procplc = subprocess.Popen(self._lst_proc)
|
self._procplc = subprocess.Popen(self._lst_proc, bufsize=1, stdout=fh, stderr=subprocess.STDOUT)
|
||||||
if self.exitcode == 0:
|
if self.exitcode == 0:
|
||||||
self._logger.warning(
|
self._logger.warning(
|
||||||
"restart plc program after clean exit"
|
"restart plc program after clean exit"
|
||||||
@@ -82,7 +95,7 @@ class RevPiPlc(Thread):
|
|||||||
self.exitcode = self._procplc.poll()
|
self.exitcode = self._procplc.poll()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.evt_exit.set()
|
self._evt_exit.set()
|
||||||
|
|
||||||
|
|
||||||
class RevPiPyLoad(proginit.ProgInit):
|
class RevPiPyLoad(proginit.ProgInit):
|
||||||
@@ -95,6 +108,7 @@ class RevPiPyLoad(proginit.ProgInit):
|
|||||||
self.autoreload = None
|
self.autoreload = None
|
||||||
self.plc = None
|
self.plc = None
|
||||||
self.plcprog = None
|
self.plcprog = None
|
||||||
|
self.plcslave = None
|
||||||
self.tpe = None
|
self.tpe = None
|
||||||
self.xmlrpc = None
|
self.xmlrpc = None
|
||||||
self.xsrv = None
|
self.xsrv = None
|
||||||
@@ -128,13 +142,16 @@ class RevPiPyLoad(proginit.ProgInit):
|
|||||||
self.autoreload = int(self.globalconfig["DEFAULT"].get("autoreload", 1))
|
self.autoreload = int(self.globalconfig["DEFAULT"].get("autoreload", 1))
|
||||||
self.autostart = int(self.globalconfig["DEFAULT"].get("autostart", 0))
|
self.autostart = int(self.globalconfig["DEFAULT"].get("autostart", 0))
|
||||||
self.plcprog = self.globalconfig["DEFAULT"].get("plcprogram", None)
|
self.plcprog = self.globalconfig["DEFAULT"].get("plcprogram", None)
|
||||||
|
self.plcslave = int(self.globalconfig["DEFAULT"].get("plcslave", 0))
|
||||||
self.xmlrpc = int(self.globalconfig["DEFAULT"].get("xmlrpc", 1))
|
self.xmlrpc = int(self.globalconfig["DEFAULT"].get("xmlrpc", 1))
|
||||||
self.zeroonexit = int(self.globalconfig["DEFAULT"].get("zeroonexit", 1))
|
self.zeroonexit = int(self.globalconfig["DEFAULT"].get("zeroonexit", 1))
|
||||||
|
|
||||||
# PLC Thread konfigurieren
|
# PLC Thread konfigurieren
|
||||||
self.logger.debug("create PLC watcher")
|
self.logger.debug("create PLC watcher")
|
||||||
self.plc = RevPiPlc(
|
self.plc = RevPiPlc(
|
||||||
self.logger, shlex.split("/usr/bin/env python3 " + self.plcprog)
|
self.pargs,
|
||||||
|
self.logger,
|
||||||
|
shlex.split("/usr/bin/env python3 -u " + self.plcprog)
|
||||||
)
|
)
|
||||||
self.plc.autoreload = self.autoreload
|
self.plc.autoreload = self.autoreload
|
||||||
self.plc.zeroonexit = self.zeroonexit
|
self.plc.zeroonexit = self.zeroonexit
|
||||||
@@ -191,8 +208,7 @@ class RevPiPyLoad(proginit.ProgInit):
|
|||||||
self.plc.start()
|
self.plc.start()
|
||||||
|
|
||||||
while not self._exit \
|
while not self._exit \
|
||||||
and not self.evt_loadconfig.is_set() \
|
and not self.evt_loadconfig.is_set():
|
||||||
and self.plc.is_alive():
|
|
||||||
self.evt_loadconfig.wait(1)
|
self.evt_loadconfig.wait(1)
|
||||||
|
|
||||||
if not self._exit:
|
if not self._exit:
|
||||||
@@ -224,7 +240,9 @@ class RevPiPyLoad(proginit.ProgInit):
|
|||||||
self.plc.join()
|
self.plc.join()
|
||||||
exitcode = self.plc.exitcode
|
exitcode = self.plc.exitcode
|
||||||
self.plc = RevPiPlc(
|
self.plc = RevPiPlc(
|
||||||
self.logger, shlex.split("/usr/bin/env python3 " + self.plcprog)
|
self.pargs,
|
||||||
|
self.logger,
|
||||||
|
shlex.split("/usr/bin/env python3 -u" + self.plcprog)
|
||||||
)
|
)
|
||||||
self.plc.autoreload = self.autoreload
|
self.plc.autoreload = self.autoreload
|
||||||
self.plc.zeroonexit = self.zeroonexit
|
self.plc.zeroonexit = self.zeroonexit
|
||||||
@@ -240,7 +258,9 @@ class RevPiPyLoad(proginit.ProgInit):
|
|||||||
return -1
|
return -1
|
||||||
else:
|
else:
|
||||||
self.plc = RevPiPlc(
|
self.plc = RevPiPlc(
|
||||||
self.logger, shlex.split("/usr/bin/env python3 " + self.plcprog)
|
self.pargs,
|
||||||
|
self.logger,
|
||||||
|
shlex.split("/usr/bin/env python3 -u" + self.plcprog)
|
||||||
)
|
)
|
||||||
self.plc.autoreload = self.autoreload
|
self.plc.autoreload = self.autoreload
|
||||||
self.plc.zeroonexit = self.zeroonexit
|
self.plc.zeroonexit = self.zeroonexit
|
||||||
|
|||||||
Reference in New Issue
Block a user