Es ist bereits eine ganze weile her, dass ich hier über die Einrichtung eines Modbus-Proxies geschrieben hatte.
Einige Zeit, nachdem ich den Modbus-Proxy als Addon in HomeAssistant getestet hatte, wurde der Proxy bei mir in einen eigenen Proxmox-Container ausgelagert und dort als Dienst installiert.
Damals lief das Setup unter einer Kombination von Debian 11 mit Python3.9 ziemlich stabil – eine Anleitung, wie das System ‚damals‘ als Dienst zu konfigurieren war, hatte ich hier im Blog allerdings nicht gepostet… [vielleicht reiche ich dieses noch nach…] (Das Repository für den Modbus-Proxy kann man hier finden)
Tatsächlich hatte ich seit der Ursprünglichen Installation keine Probleme mit der Software – und habe den Server daher lange Zeit nicht weiter angefasst… allerdings wurde es langsam mal Zeit, das System auf den aktuellen Stand zu bringen.
Nachdem das ganze System wie bereits geschrieben, ziemlich stabil lief, wurde es lange Zeit von mir nicht mehr angefasst – nun sollte allerdings ein Upgrade der Umgebung auf Debian12 stattfinden.
Das Problem, Debian 12 bringt Python 3.11 mit – und nach dem Upgrade des Betriebssystem startet der ursprünglich eingerichtete Dienst nicht mehr.
root@modbusproxy-server-test:/usr/local/bin# systemctl status mproxy.service
x mproxy.service - Modbus-Proxy
Loaded: loaded (/etc/systemd/system/mproxy.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sun 2024-01-28 12:23:39 UTC; 3min 16s ago
Duration: 19ms
Process: 426 ExecStart=modbus-proxy -c ./usr/lib/mproxy-conf.yaml (code=exited, status=1/FAILURE)
Main PID: 426 (code=exited, status=1/FAILURE)
CPU: 17ms
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Main process exited, code=exited, status=1/FAILURE
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Failed with result 'exit-code'.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Scheduled restart job, restart counter is at 5.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: Stopped mproxy.service - Modbus-Proxy.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Start request repeated too quickly.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Failed with result 'exit-code'.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: Failed to start mproxy.service - Modbus-Proxy.
Code-Sprache: PHP (php)
mittels journalctl --no-page -u mproxy.service
lässt sich auch die konkrete Fehlermeldung ermitteln:
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: Started mproxy.service - Modbus-Proxy.
Jan 28 12:23:39 modbusproxy-server-test modbus-proxy[426]: Traceback (most recent call last):
Jan 28 12:23:39 modbusproxy-server-test modbus-proxy[426]: File "/usr/local/bin/modbus-proxy", line 5, in <module>
Jan 28 12:23:39 modbusproxy-server-test modbus-proxy[426]: from modbus_proxy import main
Jan 28 12:23:39 modbusproxy-server-test modbus-proxy[426]: ModuleNotFoundError: No module named 'modbus_proxy'
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Main process exited, code=exited, status=1/FAILURE
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Failed with result 'exit-code'.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Scheduled restart job, restart counter is at 5.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: Stopped mproxy.service - Modbus-Proxy.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Start request repeated too quickly.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: mproxy.service: Failed with result 'exit-code'.
Jan 28 12:23:39 modbusproxy-server-test systemd[1]: Failed to start mproxy.service - Modbus-Proxy.
Code-Sprache: JavaScript (javascript)
Wie man hier erkennen kann, scheint ein Modul nicht mehr gefunden zu werden…
Das ist für uns schon mal ein erster Schritt zur Fehleranaylse.
öffnen wir den Pfad /usr/local/bin/
, können wir uns das file modbus-proxy
mit nano
öffnen:
root@modbusproxy-server-test:/usr/local/bin# nano modbus-proxy
Code-Sprache: PHP (php)
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from modbus_proxy import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Code-Sprache: PHP (php)
Hier sehen wir, dass folgender Aufruf erfolgt: #! /usr/bin/python3
Daher wechseln wir nun in das Verzeichnis /usr/bin/
und schauen uns mit ls | grep python3
einmal an, welche Verzeichnisse hier gelistet sind.
root@modbusproxy-server-test:/usr/bin# ls | grep python3
python3
python3-config
python3.11
python3.11-config
python3.9
python3.9-config
x86_64-linux-gnu-python3-config
x86_64-linux-gnu-python3.11-config
x86_64-linux-gnu-python3.9-config
Code-Sprache: PHP (php)
Auf dem „alten“ Server, also Debian11 mit Pyhton3.9 funktioniert der Aufruf im Script noch über „python3“ – auf der neuen Umgebung allerdings nicht mehr.
Ändert man in dem Aufruf den Pfad auf Python3.11, schlägt der Start des Modbus-Proxy ebenfalls fehl:
#!/usr/bin/python3.11
# -*- coding: utf-8 -*-
import re
import sys
from modbus_proxy import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Code-Sprache: PHP (php)
daher testen wir das ganze noch einmal mit der spezifischen Angabe Python3.9
#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
import re
import sys
from modbus_proxy import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
Code-Sprache: PHP (php)
Nachdem die Änderungen gespeichert sind, lässt sich der Modbus-Proxy dienst wieder starten …
root@modbusproxy-server-test:/usr/local/bin# systemctl start mproxy.service
root@modbusproxy-server-test:/usr/local/bin# systemctl status mproxy.service
* mproxy.service - Modbus-Proxy
Loaded: loaded (/etc/systemd/system/mproxy.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-01-28 12:43:47 UTC; 24s ago
Main PID: 450 (modbus-proxy)
Tasks: 2 (limit: 18723)
Memory: 11.0M
CPU: 71ms
CGroup: /system.slice/mproxy.service
`-450 /usr/bin/python3.9 /usr/local/bin/modbus-proxy -c ./usr/lib/mproxy-conf.yaml
Code-Sprache: PHP (php)